This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | Next revision Both sides next revision | ||
other:python:jyp_steps [2019/05/29 13:59] jypeter [Matplotlib] Improved |
other:python:jyp_steps [2019/05/29 16:04] jypeter [Matplotlib] Improved |
||
---|---|---|---|
Line 185: | Line 185: | ||
- You will usually **initialize matplotlib** with: ''import matplotlib.pyplot as plt'' | - You will usually **initialize matplotlib** with: ''import matplotlib.pyplot as plt'' | ||
* in some cases you may also need: ''import matplotlib as mpl'' | * in some cases you may also need: ''import matplotlib as mpl'' | ||
- | * you may need other matplotlib related modules, for advanced usage | + | * later, you may need other matplotlib related modules, for advanced usage |
- You need to know some **matplotlib specific vocabulary**: | - You need to know some **matplotlib specific vocabulary**: | ||
* a Matplotlib **//Figure//** (or //canvas//) is a graphical window in which you create your plots... | * a Matplotlib **//Figure//** (or //canvas//) is a graphical window in which you create your plots... | ||
- | * example: ''my_figure = plt.figure()'' | + | * example: ''my_page = plt.figure()'' |
* if you need several display windows at the same time, create several figures | * if you need several display windows at the same time, create several figures | ||
* the [[http://matplotlib.org/faq/usage_faq.html#parts-of-a-figure|parts of a figure]] are often positioned in //normalized coordinates//: ''(0, 0)'' is the bottom left of the figure, and ''(1, 1)'' the top right | * the [[http://matplotlib.org/faq/usage_faq.html#parts-of-a-figure|parts of a figure]] are often positioned in //normalized coordinates//: ''(0, 0)'' is the bottom left of the figure, and ''(1, 1)'' the top right | ||
* You don't really specify the **page orientation** (//portrait// or //landscape//) of a plot. If you want a portrait plot, it's up to you to create a plot that will look higher than it is large. The idea is not to worry about this and just check the final resulting plot: create a plot, save it, display the resulting png/pdf and then adjust the creation script | * You don't really specify the **page orientation** (//portrait// or //landscape//) of a plot. If you want a portrait plot, it's up to you to create a plot that will look higher than it is large. The idea is not to worry about this and just check the final resulting plot: create a plot, save it, display the resulting png/pdf and then adjust the creation script | ||
* If you have an idea of the layout of what you want to plot, it may be easier to explicitly specify the figure size/ratio at creation time, and try to //fill// the figure | * If you have an idea of the layout of what you want to plot, it may be easier to explicitly specify the figure size/ratio at creation time, and try to //fill// the figure | ||
- | * ''my_page = plt.figure()'': the ratio of the default figure is ''landscape'', because it is 33% larger than it is high | + | * ''my_page = plt.figure()'': the ratio of the default figure is ''landscape'', because it is 33% larger than it is high. Creating a default figure will be OK most of the time! |
* ''my_page = plt.figure(figsize=(width, height))'': create a figure with a custom ratio (sizes are considered to be in inches) | * ''my_page = plt.figure(figsize=(width, height))'': create a figure with a custom ratio (sizes are considered to be in inches) | ||
* ''my_page = plt.figure(figsize=(8.3, 11.7))'': create a figure that will theoretically fill an A4 size page in portrait mode (check [[https://www.papersizes.org/a-paper-sizes.htm|Dimensions Of A Series Paper Sizes]] if you need more size details) | * ''my_page = plt.figure(figsize=(8.3, 11.7))'': create a figure that will theoretically fill an A4 size page in portrait mode (check [[https://www.papersizes.org/a-paper-sizes.htm|Dimensions Of A Series Paper Sizes]] if you need more size details) | ||
* a Matplotlib **//Axis//** is a plot inside a Figure... [[http://matplotlib.org/faq/usage_faq.html#parts-of-a-figure|More details]] | * a Matplotlib **//Axis//** is a plot inside a Figure... [[http://matplotlib.org/faq/usage_faq.html#parts-of-a-figure|More details]] | ||
+ | * reserve space for **one plot** that will use most of the available area of the figure/page: | ||
+ | * ''my_plot = my_page.add_subplot(1, 1, 1)'': syntax is ''add_subplot(nrows, ncols, index)'' | ||
+ | * ''my_plot = my_page.subplot**s**()'' | ||
+ | * create **3 plots on 1 column** (each plot uses the full width of the figure): | ||
+ | * <code>top_plot = my_page.add_subplot(3, 1, 1) | ||
+ | middle_plot = my_page.add_subplot(3, 1, 2) | ||
+ | bottom_plot = my_page.add_subplot(3, 1, 3)</code> | ||
+ | * the following method is more efficient than add_subplot when there are lots of plots on a page<code>plot_array = my_page.subplots(3, 1) | ||
+ | top_plot = plot_array[0] | ||
+ | middle_plot = plot_array[1] | ||
+ | bottom_plot = plot_array[2]</code> | ||
+ | * creating a figure and axes with a single line: ''my_page, plot_array = **plt**.subplots(3, 1)'' | ||
* a Matplotlib **//Artist//** or //Patch// is //something// (e.g a line, a group of markers, text, the legend...) plotted on the Figure/Axis | * a Matplotlib **//Artist//** or //Patch// is //something// (e.g a line, a group of markers, text, the legend...) plotted on the Figure/Axis | ||
- some resources for having multiple plots on the same figure | - some resources for having multiple plots on the same figure | ||
Line 210: | Line 222: | ||
* ''my_page.savefig('my_plot.pdf')'': save the figure to a pdf file | * ''my_page.savefig('my_plot.pdf')'': save the figure to a pdf file | ||
* ''my_page.savefig('my_plot.png', dpi=200, transparent=True, bbox_inches='tight')'': save the figure to a png file at a higher resolution than the default (default is 100 dots per inch), with a transparent background and no extra space around the figure | * ''my_page.savefig('my_plot.png', dpi=200, transparent=True, bbox_inches='tight')'': save the figure to a png file at a higher resolution than the default (default is 100 dots per inch), with a transparent background and no extra space around the figure | ||
+ | * display the figure and its plots, and start interacting (zooming, ...) with them:\\ ''plt.show()'' | ||
- some examples are more //pythonic// (ie object oriented) than others, some example mix different styles of coding, all this can be confusing. Try to [[http://matplotlib.org/faq/usage_faq.html#coding-styles|use an object oriented way of doing things]]! | - some examples are more //pythonic// (ie object oriented) than others, some example mix different styles of coding, all this can be confusing. Try to [[http://matplotlib.org/faq/usage_faq.html#coding-styles|use an object oriented way of doing things]]! | ||
- it may be hard to (remember how to) work with colors. Some examples from the [[https://matplotlib.org/gallery/index.html]] can help you! | - it may be hard to (remember how to) work with colors. Some examples from the [[https://matplotlib.org/gallery/index.html]] can help you! | ||
Line 226: | Line 239: | ||
* Use ''matplotlib_object.set_order(NN)'' to change the order after an object has been created | * Use ''matplotlib_object.set_order(NN)'' to change the order after an object has been created | ||
- Read the [[http://www.labri.fr/perso/nrougier/teaching/matplotlib/|Matplotlib tutorial by Nicolas Rougier]] | - Read the [[http://www.labri.fr/perso/nrougier/teaching/matplotlib/|Matplotlib tutorial by Nicolas Rougier]] | ||
- | - Download the [[http://matplotlib.org/contents.html|pdf version of the manual]]. **Do not print** the 2800+ pages of the manual! Read the beginner's guide (Chapter //FIVE// of //Part II//) and have a super quick look at the table of contents of the whole document. | + | - Download the [[http://matplotlib.org/contents.html|pdf version of the manual]]. **Do not print** the 2300+ pages of the manual! Read the beginner's guide (Chapter //FIVE// of //Part II//) and have a super quick look at the table of contents of the whole document. |
==== Useful matplotlib reference pages ==== | ==== Useful matplotlib reference pages ==== |