Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
teaching:progappchim:plot_sinus_cosinus [2015/03/24 03:07] – créée villersd | teaching:progappchim:plot_sinus_cosinus [2019/10/10 19:19] – 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://scipy-lectures.github.io/ | + | Source : [[http://gael-varoquaux.info/ |
<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 ===== | ||
+ | * Documentation à consulter : | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Les limites par défaut de la figure sont un peu juste verticalement et on souhaite un peu d' | ||
+ | |||
+ | <code python 04-setting_limits.py> | ||
+ | ... | ||
+ | plt.xlim(X.min() * 1.1, X.max() * 1.1) | ||
+ | plt.ylim(C.min() * 1.1, C.max() * 1.1) | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== Fixer les graduations ===== | ||
+ | * Documentation à consulter : | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Les graduations ne sont pas idéales car elles ne montrent pas les valeurs intéressantes (+/ | ||
+ | |||
+ | <code python 05-setting_ticks.py> | ||
+ | ... | ||
+ | plt.xticks([-np.pi, | ||
+ | plt.yticks([-1, | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== Fixer le texte des graduations ===== | ||
+ | * Documentation à consulter : | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[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:// | ||
+ | |||
+ | <code python 06-setting_tick_labels.py> | ||
+ | ... | ||
+ | plt.xticks([-np.pi, | ||
+ | [r' | ||
+ | plt.yticks([-1, | ||
+ | [r' | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | <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) ===== | ||
+ | * Documentation à consulter : | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | 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' | ||
+ | |||
+ | <code python 07-moving_spines.py> | ||
+ | ... | ||
+ | ax = plt.gca() | ||
+ | ax.spines[' | ||
+ | ax.spines[' | ||
+ | ax.xaxis.set_ticks_position(' | ||
+ | ax.spines[' | ||
+ | ax.yaxis.set_ticks_position(' | ||
+ | ax.spines[' | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== Ajouter une légende ===== | ||
+ | * Documentation à consulter : | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Ajoutons une légende dans le coin supérieur gauche. Cela nécessite juste d' | ||
+ | |||
+ | |||
+ | <code python 08-adding_a_legend.py> | ||
+ | ... | ||
+ | plt.plot(X, C, color=" | ||
+ | plt.plot(X, S, color=" | ||
+ | |||
+ | plt.legend(loc=' | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== Annoter certains points ===== | ||
+ | * Documentation à consulter : | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Annotons quelques points particuliers en utilisant la commande " | ||
+ | |||
+ | <code python 09-annotate_some_points.py> | ||
+ | ... | ||
+ | t = 2 * np.pi / 3 | ||
+ | plt.plot([t, | ||
+ | plt.scatter([t, | ||
+ | plt.annotate(r' | ||
+ | xy=(t, np.cos(t)), xycoords=' | ||
+ | xytext=(-90, | ||
+ | arrowprops=dict(arrowstyle=" | ||
+ | |||
+ | plt.plot([t, | ||
+ | plt.scatter([t, | ||
+ | plt.annotate(r' | ||
+ | xy=(t, np.sin(t)), xycoords=' | ||
+ | xytext=(+10, | ||
+ | arrowprops=dict(arrowstyle=" | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== Le diable est dans les détails* ===== | ||
+ | *Attribué à Nietzsche | ||
+ | |||
+ | * Documentation à consulter : | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | 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. | ||
+ | |||
+ | <code python; title : 10-devil_is_in_the_details.py> | ||
+ | ... | ||
+ | for label in ax.get_xticklabels() + ax.get_yticklabels(): | ||
+ | label.set_fontsize(16) | ||
+ | label.set_bbox(dict(facecolor=' | ||
+ | ... | ||
+ | </ |