Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
teaching:progappchim:plot_sinus_cosinus [2015/03/24 15:41] – villersd | teaching:progappchim:plot_sinus_cosinus [2021/02/23 15:33] (Version actuelle) – villersd | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
On montre en détail comment réaliser une représentation graphique simple des fonctions sinus et cosinus. Au départ le graphique utilisera les réglages par défaut et la figure sera ensuite améliorée pas à pas en commentant les instructions matplotlib utilisées. | On montre en détail comment réaliser une représentation graphique simple des fonctions sinus et cosinus. Au départ le graphique utilisera les réglages par défaut et la figure sera ensuite améliorée pas à pas en commentant les instructions matplotlib utilisées. | ||
- | Source : [[http:// | + | Source : [[https:// |
<note important> | <note important> | ||
Ligne 15: | Ligne 15: | ||
Voici donc la représentation par défaut des fonctions sinus et cosinus : | Voici donc la représentation par défaut des fonctions sinus et cosinus : | ||
- | <sxh python; title : 01-plotting_with_default_settings.py> | + | <code python 01-plotting_with_default_settings.py> |
#! / | #! / | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
Ligne 34: | Ligne 34: | ||
plt.show() | plt.show() | ||
- | </sxh> | + | </code> |
X est un tableau numpy de 256 valeurs comprises entre -π et +π (inclus). C est le cosinus (256 valeurs) et S est le sinus (256 valeurs). | X est un tableau numpy de 256 valeurs comprises entre -π et +π (inclus). C est le cosinus (256 valeurs) et S est le sinus (256 valeurs). | ||
Ligne 44: | Ligne 44: | ||
Dans le programme ci-dessous, nous avons instancié (et commenté) tous les paramètres du graphique qui influencent son apparence. Les paramètres ont été définis explicitement à leurs valeurs par défaut, mais à partir de là, vous pourrez interagir avec ces valeurs afin d' | Dans le programme ci-dessous, nous avons instancié (et commenté) tous les paramètres du graphique qui influencent son apparence. Les paramètres ont été définis explicitement à leurs valeurs par défaut, mais à partir de là, vous pourrez interagir avec ces valeurs afin d' | ||
- | <sxh python; title : 02-instantiating_defaults.py> | + | <code python 02-instantiating_defaults.py> |
#! / | #! / | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
Ligne 86: | Ligne 86: | ||
# Show result on screen | # Show result on screen | ||
plt.show() | plt.show() | ||
- | </sxh> | + | </code> |
===== Changer la couleur et l' | ===== Changer la couleur et l' | ||
Ligne 96: | Ligne 96: | ||
Première étape, nous voulons avoir le cosinus en bleu et le sinus en rouge, et une ligne un peu plus épaisse pour chacun d'eux. Nous allons également changer légèrement la taille du graphique pour le rendre plus étendu horizontalement. Voici les lignes modifiées : | Première étape, nous voulons avoir le cosinus en bleu et le sinus en rouge, et une ligne un peu plus épaisse pour chacun d'eux. Nous allons également changer légèrement la taille du graphique pour le rendre plus étendu horizontalement. Voici les lignes modifiées : | ||
- | <sxh python; title : 03-changing_colors_and_line_widths.py> | + | <code python 03-changing_colors_and_line_widths.py> |
... | ... | ||
plt.figure(figsize=(10, | plt.figure(figsize=(10, | ||
Ligne 102: | Ligne 102: | ||
plt.plot(X, S, color=" | plt.plot(X, S, color=" | ||
... | ... | ||
- | </sxh> | + | </code> |
===== Fixer les limites ===== | ===== Fixer les limites ===== | ||
Ligne 111: | Ligne 111: | ||
Les limites par défaut de la figure sont un peu juste verticalement et on souhaite un peu d' | Les limites par défaut de la figure sont un peu juste verticalement et on souhaite un peu d' | ||
- | <sxh python; title : 04-setting_limits.py> | + | <code python 04-setting_limits.py> |
... | ... | ||
plt.xlim(X.min() * 1.1, X.max() * 1.1) | plt.xlim(X.min() * 1.1, X.max() * 1.1) | ||
plt.ylim(C.min() * 1.1, C.max() * 1.1) | plt.ylim(C.min() * 1.1, C.max() * 1.1) | ||
... | ... | ||
- | </sxh> | + | </code> |
===== Fixer les graduations ===== | ===== Fixer les graduations ===== | ||
Ligne 127: | Ligne 127: | ||
Les graduations ne sont pas idéales car elles ne montrent pas les valeurs intéressantes (+/ | Les graduations ne sont pas idéales car elles ne montrent pas les valeurs intéressantes (+/ | ||
- | <sxh python; title : 05-setting_ticks.py> | + | <code python 05-setting_ticks.py> |
... | ... | ||
plt.xticks([-np.pi, | plt.xticks([-np.pi, | ||
plt.yticks([-1, | plt.yticks([-1, | ||
... | ... | ||
- | </sxh> | + | </code> |
===== Fixer le texte des graduations ===== | ===== Fixer le texte des graduations ===== | ||
Ligne 144: | Ligne 144: | ||
Les graduations sont adéquates, mais leur écriture (3.142,...) n'est pas très explicite. on préférerait lire π au lieu de 3.142. La solution consiste à fournir en plus des graduations une seconde liste reprenant les textes correspondants à écrire. Notez qu'on utilise [[http:// | Les graduations sont adéquates, mais leur écriture (3.142,...) n'est pas très explicite. on préférerait lire π au lieu de 3.142. La solution consiste à fournir en plus des graduations une seconde liste reprenant les textes correspondants à écrire. Notez qu'on utilise [[http:// | ||
- | <sxh python; title : 06-setting_tick_labels.py> | + | <code python 06-setting_tick_labels.py> |
... | ... | ||
plt.xticks([-np.pi, | plt.xticks([-np.pi, | ||
Ligne 151: | Ligne 151: | ||
[r' | [r' | ||
... | ... | ||
- | </sxh> | + | </code> |
+ | <note tip>Les chaînes de caractères incluant du code LaTeX pour les formules mathématiques doivent être préfixées par la lettre " | ||
===== Déplacer les lignes de délimitation (spines) ===== | ===== Déplacer les lignes de délimitation (spines) ===== | ||
* Documentation à consulter : | * Documentation à consulter : | ||
Ligne 161: | Ligne 162: | ||
Les lignes de délimitations verticales et horizontales (spines) sont les lignes qui connectent les graduations sur les axes et délimitent les limites de la surface visualisant les données du graphique. Ces lignes peuvent être placées arbitrairement et jusqu' | Les lignes de délimitations verticales et horizontales (spines) sont les lignes qui connectent les graduations sur les axes et délimitent les limites de la surface visualisant les données du graphique. Ces lignes peuvent être placées arbitrairement et jusqu' | ||
- | <sxh python; title : 07-moving_spines.py> | + | <code python 07-moving_spines.py> |
... | ... | ||
ax = plt.gca() | ax = plt.gca() | ||
Ligne 171: | Ligne 172: | ||
ax.spines[' | ax.spines[' | ||
... | ... | ||
- | </sxh> | + | </code> |
===== Ajouter une légende ===== | ===== Ajouter une légende ===== | ||
Ligne 182: | Ligne 183: | ||
- | <sxh python; title : 08-adding_a_legend.py> | + | <code python 08-adding_a_legend.py> |
... | ... | ||
plt.plot(X, C, color=" | plt.plot(X, C, color=" | ||
Ligne 189: | Ligne 190: | ||
plt.legend(loc=' | plt.legend(loc=' | ||
... | ... | ||
- | </sxh> | + | </code> |
===== Annoter certains points ===== | ===== Annoter certains points ===== | ||
Ligne 198: | Ligne 199: | ||
Annotons quelques points particuliers en utilisant la commande " | Annotons quelques points particuliers en utilisant la commande " | ||
- | <sxh python; title : 09-annotate_some_points.py> | + | <code python 09-annotate_some_points.py> |
... | ... | ||
t = 2 * np.pi / 3 | t = 2 * np.pi / 3 | ||
Ligne 215: | Ligne 216: | ||
arrowprops=dict(arrowstyle=" | arrowprops=dict(arrowstyle=" | ||
... | ... | ||
- | </sxh> | + | </code> |
===== Le diable est dans les détails* ===== | ===== Le diable est dans les détails* ===== | ||
Ligne 226: | Ligne 227: | ||
Les textes des graduations sont à présent difficilement lisibles à cause des lignes bleue et rouge. On peut les écrire avec une taille supérieure et on peut aussi ajuster leurs propriétés de telle sorte qu'ils soient rendus que un fond blanc semi-transparent (transparence définie par alpha). Cela nous permet de voir correctement à la fois les données et les textes des graduations. | Les textes des graduations sont à présent difficilement lisibles à cause des lignes bleue et rouge. On peut les écrire avec une taille supérieure et on peut aussi ajuster leurs propriétés de telle sorte qu'ils soient rendus que un fond blanc semi-transparent (transparence définie par alpha). Cela nous permet de voir correctement à la fois les données et les textes des graduations. | ||
- | <sxh python; title : 10-devil_is_in_the_details.py> | + | <code python; title : 10-devil_is_in_the_details.py> |
... | ... | ||
for label in ax.get_xticklabels() + ax.get_yticklabels(): | for label in ax.get_xticklabels() + ax.get_yticklabels(): | ||
Ligne 232: | Ligne 233: | ||
label.set_bbox(dict(facecolor=' | label.set_bbox(dict(facecolor=' | ||
... | ... | ||
- | </sxh> | + | </code> |