Both sides previous revisionPrevious revision | Next revisionBoth sides next revision |
other:python:jyp_steps [2019/05/29 15:59] – [Matplotlib] Improved jypeter | other:python:jyp_steps [2019/05/29 18:04] – [Matplotlib] Improved jypeter |
---|
- 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 |
* ''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! |
* 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 ==== |