Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révisionLes deux révisions suivantes |
teaching:progappchim:matplotlib_simple [2015/03/24 15:45] – [Graphe simple de sinus et cosinus] villersd | teaching:progappchim:matplotlib_simple [2021/01/05 16:00] – [Références] villersd |
---|
Le projet [[http://wiki.scipy.org/PyLab|Pylab]] vise à regrouper ces différentes librairies. De nombreuses commandes de Pylab ont été définies semblablement aux commandes du logiciel commercial [[http://fr.wikipedia.org/wiki/MATLAB|MatLab]]. | Le projet [[http://wiki.scipy.org/PyLab|Pylab]] vise à regrouper ces différentes librairies. De nombreuses commandes de Pylab ont été définies semblablement aux commandes du logiciel commercial [[http://fr.wikipedia.org/wiki/MATLAB|MatLab]]. |
| |
| TODO : différences pyplot comme ici : https://towardsdatascience.com/5-quick-facts-about-python-matplotlib-53f23eab6d31 |
| |
===== Installation ===== | ===== Installation ===== |
| |
La [[http://matplotlib.sourceforge.net/users/installing.html|page d'installation de Matplotlib]] fournit une procédure pas à pas assez complète et facile pour installer matplotlib (et NumPy). Sinon : | La [[http://matplotlib.sourceforge.net/users/installing.html|page d'installation de Matplotlib]] fournit une procédure pas à pas assez complète et facile pour installer matplotlib (et NumPy). Sinon : |
* Sous Windows, installez une distribution complète comme [[http://code.google.com/p/pythonxy/|Python (x, y)]] | * Sous Windows, installez une distribution complète comme [[https://www.anaconda.com/distribution/|Anaconda]] ou [[http://code.google.com/p/pythonxy/|Python (x, y)]] |
* Sous Linux, installez les librairies suivantes : python-numpy python-scipy python-matplotlib | * Sous GNU/Linux, on peut aussi n'installer que les librairies suivantes : python-numpy python-scipy python-matplotlib |
| |
===== Directive d'importation ==== | ===== Directive d'importation ==== |
* standard : <code>import matplotlib as mpl | * standard : <code>import matplotlib as mpl |
import matplotlib.pyplot as plt</code> | import matplotlib.pyplot as plt</code> |
* alternative, simplifiée (en mode pylab) : <code>from pylab import *</code> | * alternative, simplifiée (en mode pylab, pour obtenir une certaine compatibilité avec Matlab) : <code>from pylab import *</code> |
| |
===== Graphiques de séries de points en lignes ===== | ===== Graphiques de séries de points en lignes ===== |
Il s'agit d'un graphe classique de séries de points reliés par une ligne colorée : | Il s'agit d'un graphe classique de séries de points reliés par une ligne colorée : |
<sxh python; title : simple_series_01.py> | <code python simple_series_01.py> |
#! /usr/bin/env python | #! /usr/bin/env python |
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- |
#les données | #les données |
serie_x = [0.,1.,2.,3.,5.,7.,11.,13.,17.,19.] | serie_x = [0.,1.,2.,3.,5.,7.,11.,13.,17.,19.] |
serie_y1 = [x**2 for x in serie_x] | serie_y1 = [x**2 for x in serie_x] # ces lignes utilisent la technique de "liste en compréhension" |
serie_y2 = [x**1.5 for x in serie_x] | serie_y2 = [x**1.5 for x in serie_x] # pour définir efficacement une liste par une seule instruction. |
| |
#plot de deux lignes lignes | #plot de deux lignes lignes |
| |
plt.show() # vue interactive de la figure | plt.show() # vue interactive de la figure |
</sxh> | </code> |
| |
Le même graphique peut être agrémenté d'un titre, d'appellations pour les axes, de valeurs limites, d'une légende : | Le même graphique peut être agrémenté d'un titre, d'appellations pour les axes, de valeurs limites, d'une légende : |
| |
<sxh python; title : simple_series_02.py> | <code python simple_series_02.py> |
#! /usr/bin/env python | #! /usr/bin/env python |
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- |
| |
plt.figure() #initialisation d'une nouvelle figure | plt.figure() #initialisation d'une nouvelle figure |
plt.title(u"Ma première figure avec Matplolib") # la chaine unicode est préfixée par u (présence de caractères non ASCII primitifs) | plt.title("Ma première figure avec Matplolib") |
| |
#les données | #les données |
serie_x = [0.,1.,2.,3.,5.,7.,11.,13.,17.,19.] | serie_x = [0., 1., 2., 3., 5., 7., 11., 13., 17., 19.] |
serie_y1 = [x**2 for x in serie_x] | serie_y1 = [x**2 for x in serie_x] |
serie_y2 = [x**1.5 for x in serie_x] | serie_y2 = [x**1.5 for x in serie_x] |
plt.plot(serie_x, serie_y1, label="x^2") | plt.plot(serie_x, serie_y1, label="x^2") |
plt.plot(serie_x, serie_y2, label="x^1.5") | plt.plot(serie_x, serie_y2, label="x^1.5") |
plt.xlabel(u"Les données X") | plt.xlabel("Les données X") |
plt.ylabel(u"Des valeurs calculées de Y") | plt.ylabel("Des valeurs calculées de Y") |
| |
#ajout d'une légende | #ajout d'une légende |
| |
plt.show() # vue interactive de la figure | plt.show() # vue interactive de la figure |
</sxh> | </code> |
| |
===== Changer simplement les lignes en points ===== | ===== Changer simplement les lignes en points ===== |
La personnalisation des lignes ou point se fait très facilement lorsqu'on utilise la fonction de traçage, en passant dans une chaîne de deux caractères la spécification du type de ligne et de la couleur à utiliser. Voici un exemple d'un graphique qui utilise des cercles verts comme marqueurs, sans ligne, grâce aux deux caractères "g" (pour green ou vert) et "o" (pour figurer des petits cercles. | La personnalisation des lignes ou point se fait très facilement lorsqu'on utilise la fonction de traçage, en passant dans une chaîne de deux caractères la spécification du type de ligne et de la couleur à utiliser. Voici un exemple d'un graphique qui utilise des cercles verts comme marqueurs, sans ligne, grâce aux deux caractères "g" (pour green ou vert) et "o" (pour figurer des petits cercles. |
<sxh python; title : simple_series_03.py> | |
| <code python simple_series_03.py> |
#! /usr/bin/env python | #! /usr/bin/env python |
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- |
| |
#les données | #les données |
serie_x = [0.,1.,2.,3.,5.,7.,11.,13.,17.,19.] | serie_x = [0., 1., 2., 3., 5., 7., 11., 13., 17., 19.] |
serie_y1 = [x**2 for x in serie_x] | serie_y1 = [x**2 for x in serie_x] |
| |
plt.show() # vue interactive de la figure | plt.show() # vue interactive de la figure |
| |
</sxh> | </code> |
Pour essayer d'autres marqueurs ou couleurs, consultez la documentation ici : | Pour essayer d'autres marqueurs ou couleurs, consultez la documentation ici : |
* [[http://matplotlib.org/api/markers_api.html]] | * [[http://matplotlib.org/api/markers_api.html]] |
| |
===== Tracé d'une fonction ===== | ===== Tracé d'une fonction ===== |
<sxh python; title : simple_fonction_01.py> | <code python simple_fonction_01.py> |
#! /usr/bin/env python | #! /usr/bin/env python |
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- |
| |
show() | show() |
</sxh> | </code> |
| |
===== Graphe simple de sinus et cosinus ===== | ===== Graphe simple de sinus et cosinus ===== |
À [[plot_sinus_cosinus|cette page]], 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. | À [[plot_sinus_cosinus|cette page]], 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/intro/matplotlib/matplotlib.html|Matplotlib: plotting]], par Nicolas Rougier, Mike Müller, Gaël Varoquaux. | Source : [[http://gael-varoquaux.info/scipy-lecture-notes/intro/matplotlib/index.html|Matplotlib: plotting]], par Nicolas Rougier, Mike Müller, Gaël Varoquaux. |
| |
<note tip>Cette dernière référence reprend aussi des explications sur les principes d'organisation des graphiques multiples sur une figure, propose d'autres types de graphes sous forme d'exercices avec les solutions disponibles, et propose de nombreux liens pour l'apprentissage de Matplotlib.</note> | <note tip>Cette dernière référence reprend aussi des explications sur les principes d'organisation des graphiques multiples sur une figure, propose d'autres types de graphes sous forme d'exercices avec les solutions disponibles, et propose de nombreux liens pour l'apprentissage de Matplotlib.</note> |
| |
===== Histogramme simple ===== | |
<sxh python; title : simple-histogram-random_numbers.py> | |
#! /usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
Matplotib : histogramme simple de nombres aléatoires | |
""" | |
from pylab import randn, hist, show #importation simplifiée | |
| |
x = randn(10000) | ===== Galerie d'exemples ===== |
hist(x, 25) | | {{:teaching:progappchim:histogramme_simple.png?280|}} \\ [[teaching:progappchim:matplotlib_gallery:Histogramme_simple|Histogramme simple]] | {{:teaching:progappchim:rotateur_biatomique-01.png?280|}} \\ [[teaching:progappchim:matplotlib_gallery:rotateur_biatomique|Rotateur biatomique]] | {{:teaching:progappchim:potentiel_morse-04.png?280|}} \\ [[teaching:progappchim:matplotlib_gallery:potentiel_morse|Potentiel de Morse]]| |
show() | | {{:teaching:progappchim:ph_topographic-01.png?280|}} \\ [[teaching:progappchim:ph-3d|Ph à 3D]] \\ (dilution et neutralisation)| {{:teaching:progappchim:matplotlib_gallery:pka-pkb-plane-01.png?280}} \\ [[:teaching:progappchim:matplotlib_gallery:pka_pkb_plane|Couples acide-base dans le plan pKa/pKb]] | un autre... | |
</sxh> | | un autre... | un autre... | un autre... | |
| |
| ===== Utilisation "inline" ou en fenêtre interactive, sous Spyder ===== |
| Notamment avec l'éditeur Spyder, il est possible de choisir le mode d'affichage des graphes : |
| * dans une fenêtre interactive |
| * en ligne (mode "inline") sous forme d'une image au format .png, dans la console |
| Pour choisir le mode, utiliser les réglages suivants de Spyder : menu Outils - option Préférences - rubrique Console Ipython - onglet Graphiques - la sortie "Automatique" permet d'obtenir les graphes dans une fenêtre interactive, sinon, choisir "En ligne". L'option sera prise en compte après avoir quitté Spyder et l'avoir relancé. Sinon, il est possible de sélectionner l'un ou l'autre des modes par les commandes suivantes dans la console : |
| <code> |
| %matplotlib auto |
| %matplotlib inline |
| </code> |
| |
| ===== Animations ===== |
| * [[https://towardsdatascience.com/animations-with-matplotlib-d96375c5442c|Animations with Matplotlib]] |
| * [[https://towardsdatascience.com/the-simplest-way-of-making-gifs-and-math-videos-with-python-aec41da74c6e|The easiest and fastest way to make GIFs and math videos with Python - How to create amazing animations in seconds using Celluloid]] Bruno Rodrigues, Medium, 13/10/2020 → [[https://github.com/jwkvam/celluloid]] |
| * [[https://matplotlib.org/gallery/animation/rain.html]] |
| |
| ===== Styles ===== |
| * [[https://dvillers.umons.ac.be/wiki/teaching:progappchim:matplotlib_simple#references|teaching:progappchim:matplotlib_simple [Didier Villers, UMONS - wiki]]] |
| * [[https://tonysyu.github.io/matplotlib-style-gallery.html#.XtmoqDDgpqs|Matplotlib Style Gallery - Tony S. Yu]] |
| * [[https://matplotlib.org/3.2.1/tutorials/introductory/customizing.html|Customizing Matplotlib with style sheets and rcParams — Matplotlib 3.2.1 documentation]] |
| * [[https://jakevdp.github.io/PythonDataScienceHandbook/04.11-settings-and-stylesheets.html|Customizing Matplotlib: Configurations and Stylesheets | Python Data Science Handbook]] |
| * [[https://matplotlib.org/3.2.1/gallery/style_sheets/style_sheets_reference.html|Style sheets reference — Matplotlib 3.2.1 documentation]] |
| * [[https://github.com/dhaitz/mplcyberpunk|dhaitz/mplcyberpunk: “Cyberpunk style” for matplotlib plots]] |
| |
===== Références ===== | ===== Références ===== |
* [[http://www-irma.u-strasbg.fr/~navaro/imfs/matplotlib.pdf|Une présentation synthétique en français]] | * [[http://www-irma.u-strasbg.fr/~navaro/imfs/matplotlib.pdf|Une présentation synthétique en français]] |
* [[http://python.developpez.com/tutoriels/graphique-2d/matplotlib/|Tutoriel en français]] | * [[http://python.developpez.com/tutoriels/graphique-2d/matplotlib/|Tutoriel en français]] |
| * [[http://www.science-emergence.com/Matplotlib/|Un autre tutoriel en français]] |
| * [[http://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb|matplotlib - 2D and 3D plotting in Python]], tutoriel Jupyter en anglais |
* [[https://github.com/thehackerwithin/PyTrieste/wiki/Python7-MatPlotLib|Un tutoriel en anglais]] | * [[https://github.com/thehackerwithin/PyTrieste/wiki/Python7-MatPlotLib|Un tutoriel en anglais]] |
* [[http://scipy-lectures.github.io/intro/matplotlib/matplotlib.html|Matplotlib: plotting]], par Nicolas Rougier, Mike Müller, Gaël Varoquaux (et la [[http://www.labri.fr/perso/nrougier/teaching/matplotlib/|version dérivée]] de Nicolas Rougier) | * [[http://scipy-lectures.github.io/intro/matplotlib/matplotlib.html|Matplotlib: plotting]], par Nicolas Rougier, Mike Müller, Gaël Varoquaux (et la [[http://www.labri.fr/perso/nrougier/teaching/matplotlib/|version dérivée]] de Nicolas Rougier) |
| * [[https://realpython.com/python-matplotlib-guide/|Python Plotting With Matplotlib (Guide)]], 2018 |
* [[http://www.thetechrepo.com/main-articles/465-how-to-create-a-graph-in-python.html]] | * [[http://www.thetechrepo.com/main-articles/465-how-to-create-a-graph-in-python.html]] |
* Un article intéressant sur les recommandations pour de bonnes figures : [[http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1003833|Ten Simple Rules for Better Figures]], Nicolas P. Rougier (INRIA, France). Les figures sont crées avec matplotlib et l'ensemble de l'article est disponible sous licence CC0. | * Un article intéressant sur les recommandations pour de bonnes figures : [[http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1003833|Ten Simple Rules for Better Figures]], Nicolas P. Rougier (INRIA, France). Les figures sont crées avec matplotlib et l'ensemble de l'article est disponible sous licence CC0. |
| * [[http://python4mpia.github.io/plotting/plotting.html|Tutoriels du Max Planck Institute for Astronomy]], avec introduction et fonctions avancées |
| * [[http://geeksta.net/geeklog/custom-matplotlib-styles/|Customizing Matplotlib's Plotting Styles]] |
| * [[http://bokeh.pydata.org/en/latest/|Bokeh]], une autre librairie de visualisation |
| * [[https://seaborn.pydata.org/|Seaborn]], une librairie basée sur Matplotlib |
| * [[https://python-graph-gallery.com/|the Python Graph Gallery]], galerie de graphes Seaborn/Matplotlib avec code |
| * [[https://medium.com/@neuralnets/statistical-data-visualization-series-with-python-and-seaborn-for-data-science-5a73b128851d|Data Visualization with Python and Seaborn]] |
| * [[https://waterprogramming.wordpress.com/2016/04/29/interactive-plotting-basics-in-matplotlib/|Interactive plotting basics in matplotlib]] |
| * [[https://heartbeat.fritz.ai/introduction-to-matplotlib-data-visualization-in-python-d9143287ae39|Introduction to Matplotlib — Data Visualization in Python]] |
| * [[https://towardsdatascience.com/all-your-matplotlib-questions-answered-420dd95cb4ff|Your Ultimate Guide to Matplotlib]] (not so ultimate...) |
| * [[https://towardsdatascience.com/a-step-by-step-guide-for-creating-advanced-python-data-visualizations-with-seaborn-matplotlib-1579d6a1a7d0|A step-by-step guide for creating advanced Python data visualizations with Seaborn / Matplotlib]] |
| * [[https://medium.com/dunder-data/create-a-bar-chart-race-animation-in-python-with-matplotlib-477ed1590096|Creating a Bar Chart Race Animation in Python with Matplotlib]] |
| * [[https://medium.com/python-in-plain-english/radar-chart-basics-with-pythons-matplotlib-ba9e002ddbcd|Radar Chart Basics with Python’s Matplotlib]] |
| * [[https://towardsdatascience.com/matplotlib-who-said-it-needs-to-be-simple-7156df7c827b|Matplotlib — Who said it needs to be simple? - by Renan Lolico - Jun, 2020 - Towards Data Science]] |
| * [[https://medium.com/python-in-plain-english/line-chart-basics-with-pythons-matplotlib-e52032981bd3|Line Chart Basics with Python’s Matplotlib]] One of the most used and most effective ways of visualizing data |
| * [[https://towardsdatascience.com/5-powerful-tricks-to-visualize-your-data-with-matplotlib-16bc33747e05|5 Powerful Tricks to Visualize Your Data with Matplotlib]] - How to use LaTeX font, create zoom effect, outbox legend, continuous error, and adjust box pad margin - Towards Data Science, Medium, 29/09/2020 |
| * [[https://towardsdatascience.com/everything-about-plotting-in-python-c12ccdc359bc|Everything about plotting in Python - From matplotlib to pandas.plot()]] Medium, 17/07/2020 |
| * [[https://www.youtube.com/playlist?list=PL-osiE80TeTvipOqomVEeZ1HRrcEvtZB_|Matplotlib Tutorials]] 10 videos Youtube de Corey Schafer |
| * [[https://towardsdatascience.com/visualizations-with-matplotlib-part-1-c9651008b6b8|Python Data Visualization with Matplotlib — Part 1 - Completed Matplotlib tutorials for Python plotting from basic to advanced, with 90+ examples]], Medium, 20/10/2020 Rizky Maulana Nurhidayat |
| * [[https://becominghuman.ai/9-tips-and-tricks-for-better-visualization-in-matplotlib-301a2b475537|9 Tips and Tricks for Better Visualization in Matplotlib]] |
| * [[https://towardsdatascience.com/how-to-highlight-cells-in-matplotlib-tables-bd438cd4858a|How to Highlight Cells in Matplotlib Tables]] |
| * [[https://medium.com/swlh/creating-3d-video-visualization-with-matplotlib-python-data-visualization-series-d8f5dfe1c460|Create 3D Video Visualization With Matplotlib - A guide to visualize your 3D plot into a video]] |
| * [[https://towardsdatascience.com/stacked-bar-charts-with-pythons-matplotlib-f4020e4eb4a7|Stacked Bar Charts with Python’s Matplotlib - An excellent way to visualize proportions and composition]] Thiago Carvalho, 23/11/2020, Medium |
| * [[https://towardsdatascience.com/making-publication-quality-figures-in-python-part-i-fig-and-axes-d86c3903ad9b|Making publication-quality figures in Python (Part I): Fig and Axes]] (Guangyuan (Frank) Li, Medium, Jan, 2021) |
| * [[https://towardsdatascience.com/making-publication-quality-figures-in-python-part-ii-line-plot-legends-colors-4430a5891706|Making publication-quality figures in python (Part II): Line plot, Legends, Colors]] (Guangyuan (Frank) Li, Medium, Jan, 2021) |
| * [[https://github.com/frankligy/python_visualization_tutorial|GitHub - frankligy/python_visualization_tutorial: A comprehensive guide of how to make publication-ready figures in python]] |
| * [[https://towardsdatascience.com/making-matplotlib-beautiful-by-default-d0d41e3534fd|Making Matplotlib Beautiful By Default - Use Seaborn to control Matplotlib defaults (and forget that shade of blue forever)]] Callum Ballard, Medium, |
| Callum Ballard, 22/05/2020 |
| |
| |
| |
| |
| |
| |
| |
| |
| ==== Exemples ==== |
| * [[https://towardsdatascience.com/5-quick-and-easy-data-visualizations-in-python-with-code-a2284bae952f|5 Quick and Easy Data Visualizations in Python with Code]] |
| * Jupyter notebooks : |
| * [[http://nbviewer.jupyter.org/github/jming/cs109/blob/master/lec_03_statistical_graphs.ipynb|A Gallery of Statistical Graphs in Matplotlib]] |
| * [[http://nbviewer.jupyter.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb|XKCD plots in Matplotlib]] + [[http://nbviewer.jupyter.org/url/jakevdp.github.io/downloads/notebooks/XKCD_sketch_path.ipynb|ceci]] |
| * [[https://github.com/naveenv92/python-science-tutorial|Python Science Tutorials]] Naveen Venkatesan, contains a series of scripts and notebooks to help people get acclimated to using Python for scientific publications. |