This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
other:python:jyp_steps [2019/06/18 08:40] jypeter [Useful matplotlib reference pages] Added special colormap values |
other:python:jyp_steps [2019/08/09 09:42] jypeter [Useful matplotlib reference pages] |
||
---|---|---|---|
Line 211: | Line 211: | ||
bottom_plot = plot_array[2]</code> | bottom_plot = plot_array[2]</code> | ||
* creating a figure and axes with a single line: ''my_page, plot_array = **plt**.subplots(3, 1)'' | * creating a figure and axes with a single line: ''my_page, plot_array = **plt**.subplots(3, 1)'' | ||
+ | * use [[https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure.add_axes|my_page.add_axes(...)]] to add an axis in an arbirary location of the page\\ ''my_page.add_axes([left, bottom, width, height])'' | ||
* 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 | ||
* **clearing** the //page// (or part of it): you probably won't need that... | * **clearing** the //page// (or part of it): you probably won't need that... | ||
Line 222: | Line 223: | ||
* [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots.html|plt.subplots(...)]] with an **s** at the end ([[https://matplotlib.org/gallery/subplots_axes_and_figures/subplots_demo.html|demo]]) | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots.html|plt.subplots(...)]] with an **s** at the end ([[https://matplotlib.org/gallery/subplots_axes_and_figures/subplots_demo.html|demo]]) | ||
* [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots_adjust.html|subplots_adjust]] can be used to change the overall boundaries of the subplots on the figure, and the spacing between the subplots\\ ''plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)''\\ or ''my_page.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)'' | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots_adjust.html|subplots_adjust]] can be used to change the overall boundaries of the subplots on the figure, and the spacing between the subplots\\ ''plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)''\\ or ''my_page.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)'' | ||
+ | * ''hspace''/''wspace'' is the amount of height/width between the subplots | ||
+ | * ''hspace=0.1'' is enough for just displaying the ticks and the labels, without the axis name | ||
+ | * use ''hspace=0'' to stick the plots together vertically | ||
+ | * do not forget to disable the ticks where there is no space to plot them: ''my_plot.set_xticks([])'' | ||
+ | * ''my_page.subplots_adjust(right=0.75)'' will leave 25% on the right of the page for adding a legend outside of a plot | ||
+ | * You can also **resize an existing (sub)plot** the following way: | ||
+ | - Get the current size information: ''pl_x_bottomleft, pl_y_bottomleft, pl_width, pl_height = my_plot.get_position().bounds'' | ||
+ | - Set the new size: e.g reduce the height with ''my_plot.set_position( (pl_x_bottomleft, pl_y_bottomleft, pl_width, pl_height * 0.5) )'' | ||
* [[https://matplotlib.org/gallery/index.html#subplots-axes-and-figures|Subplots, axes and figures]] gallery | * [[https://matplotlib.org/gallery/index.html#subplots-axes-and-figures|Subplots, axes and figures]] gallery | ||
* [[https://matplotlib.org/tutorials/intermediate/gridspec.html#sphx-glr-tutorials-intermediate-gridspec-py|Customizing Figure Layouts Using GridSpec and Other Functions]], [[https://matplotlib.org/tutorials/intermediate/constrainedlayout_guide.html|constrained layout]] and [[https://matplotlib.org/tutorials/intermediate/tight_layout_guide.html|tight layout]] | * [[https://matplotlib.org/tutorials/intermediate/gridspec.html#sphx-glr-tutorials-intermediate-gridspec-py|Customizing Figure Layouts Using GridSpec and Other Functions]], [[https://matplotlib.org/tutorials/intermediate/constrainedlayout_guide.html|constrained layout]] and [[https://matplotlib.org/tutorials/intermediate/tight_layout_guide.html|tight layout]] | ||
Line 229: | Line 238: | ||
* ''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, panning...) with them:\\ ''plt.show()'' | - **display** the figure and its plots, and **start interacting** (zooming, panning...) with them:\\ ''plt.show()'' | ||
- | - 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 //and colorbars//**. Some examples from the [[https://matplotlib.org/gallery/index.html|matplotlib Gallery]] can help you!\\ Note: A **reversed version of each colormap** is available by appending ''_r'' to the name, e.g., ''viridis_r'' |
- | * [[https://matplotlib.org/examples/pylab_examples/leftventricle_bulleye.html|leftventricle_bulleye.py]]: associating different types of colormaps to a plot and colorbar | + | * [[https://matplotlib.org/gallery/specialty_plots/leftventricle_bulleye.html|leftventricle_bulleye.py]]: associating different types of colormaps to a plot and colorbar |
* [[https://matplotlib.org/examples/api/colorbar_only.html|colorbar_only.py]]: the different types of colorbars (or plotting only a colorbar) | * [[https://matplotlib.org/examples/api/colorbar_only.html|colorbar_only.py]]: the different types of colorbars (or plotting only a colorbar) | ||
- | * [[https://matplotlib.org/examples/color/colormaps_reference.html|colormaps_reference.py]]: pre-defined colormaps | + | * [[https://matplotlib.org/gallery/color/colormap_reference.html|colormaps_reference.py]]: pre-defined colormaps |
- | * [[https://matplotlib.org/examples/color/named_colors.html|named_colors.py]]: named colors | + | * [[https://matplotlib.org/gallery/color/named_colors.html|named_colors.py]]: named colors |
- | * More details about the colors below, in the [[#graphics_related_resources|Resources section]] | + | * More details about colors and colorbars below, in the [[#useful_matplotlib_reference_pages|Useful matplotlib reference pages]] section and the [[#graphics_related_resources|Graphics related resources]] section |
- | - if you don't see a part of what you have plotted, maybe it's hidden behind other elements! Use the [[https://matplotlib.org/examples/pylab_examples/zorder_demo.html|zorder parameter]] to explicitly specify the plotting order/layers | + | - if you don't see a part of what you have plotted, maybe it's hidden behind other elements! Use the [[https://matplotlib.org/examples/pylab_examples/zorder_demo.html|zorder parameter]] to explicitly **specify the plotting order/layers/depth** |
* things should automatically work //as expected// if //zorder// is not explicitly specified | * things should automatically work //as expected// if //zorder// is not explicitly specified | ||
* Use the ''zorder=NN'' parameter when creating objects. ''NN'' is an integer where 0 is the lowest value (the farthest from the eye), and objects are plotted above objects with a lower //zorder// value | * Use the ''zorder=NN'' parameter when creating objects. ''NN'' is an integer where 0 is the lowest value (the farthest from the eye), and objects are plotted above objects with a lower //zorder// value | ||
* 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 | ||
+ | - you can use **transparency** to partially show what is behind some markers or other objects. Many //artists// accept the ''alpha'' parameter where ''0.0'' means that the object is completely transparent, and ''1.0'' means completely opaque\\ e.g. ''my_plot.scatter(..., alpha=0.7)'' | ||
- sometimes the results of the python/matplolib commands are displayed immediately, sometimes not. It depends if you are in [[http://matplotlib.org/faq/usage_faq.html#what-is-interactive-mode|interactive or non-interactive]] mode | - sometimes the results of the python/matplolib commands are displayed immediately, sometimes not. It depends if you are in [[http://matplotlib.org/faq/usage_faq.html#what-is-interactive-mode|interactive or non-interactive]] mode | ||
- if your matplotlib is executed in a batch script, it will generate an error when trying to create (''show()'') a plot, because matplotlib expects to be able to display the figure on a screen by default. | - if your matplotlib is executed in a batch script, it will generate an error when trying to create (''show()'') a plot, because matplotlib expects to be able to display the figure on a screen by default. | ||
Line 248: | Line 258: | ||
==== Useful matplotlib reference pages ==== | ==== Useful matplotlib reference pages ==== | ||
- | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html|plot(...)]]: Plot y versus x as lines and/or markers | + | * Some plot types: |
- | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html|scatter(...)]]: A scatter plot of y vs x with varying marker size and/or color | + | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html|plot(...)]]: Plot y versus x as lines and/or markers |
+ | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html|scatter(...)]]: A scatter plot of y vs x with varying marker size and/or color | ||
* The ''plot'' function will be faster for scatterplots where markers don't vary in size or color | * The ''plot'' function will be faster for scatterplots where markers don't vary in size or color | ||
+ | * [[https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.contourf.html|contour(...) and contourf(...)]]: draw contour lines and filled contours | ||
+ | * X and Y axes parameters | ||
+ | * Axis range: ''my_plot.set_xlim(x_leftmost_value, x_rightmost_value)'' | ||
+ | * Use the leftmost and rightmost values to specify the orientation of the axis (i.e the rightmost value can be smaller than the leftmost) | ||
+ | * Axis label: ''my_plot.set_xlabel(x_label_string, fontsize=axis_label_fontsize)'' | ||
+ | * Use the extra labelpad parameter to move the label closer (negative value) to the axis or farther (positive value): e.g. ''my_plot.set_xlabel('A closer label', labelpad=-20'' | ||
+ | * Major (and minor) tick marks location: ''my_plot.set_xticks(x_ticks_values, minor=False)'' | ||
+ | * Use an empty list if you don't want tick marks: ''my_plot.set_xticks([])'' | ||
+ | * Tick labels (if you don't want the default values): ''my_plot.set_xticklabels(x_ticks_labels, minor=False, fontsize=ticklabels_fontsize)'' | ||
+ | * ''x_ticks_labels'' is a list of strings that has the same length as ''x_ticks_values''. Use an empty string in the positions where you don't want a label | ||
+ | * Many more options for ticks, labels, orientation, ... | ||
* [[https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html|line]] parameters | * [[https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html|line]] parameters | ||
* ''linestyle'': ''solid'', ''None'', [[https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_linestyle|other]] ([[https://matplotlib.org/examples/lines_bars_and_markers/line_styles_reference.html|default styles example]], [[https://matplotlib.org/examples/lines_bars_and_markers/linestyles.html|custom styles example]]) | * ''linestyle'': ''solid'', ''None'', [[https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_linestyle|other]] ([[https://matplotlib.org/examples/lines_bars_and_markers/line_styles_reference.html|default styles example]], [[https://matplotlib.org/examples/lines_bars_and_markers/linestyles.html|custom styles example]]) | ||
* [[https://matplotlib.org/api/markers_api.html|marker types]] | * [[https://matplotlib.org/api/markers_api.html|marker types]] | ||
- | * ''fillstyle'': ''full'', ''None'', [[https://matplotlib.org/gallery/lines_bars_and_markers/marker_fillstyle_reference.html|other]] | + | * Default marker size and edge width: |
- | * Other attributes: ''markersize'', ''markerfacecolor'' (and ''markerfacecoloralt'' for dual color markers), ''markeredgecolor'', ''markeredgewidth'' | + | * ''mpl.rcParams['lines.markersize'] %%**%% 2'' => 36 |
+ | * ''mpl.rcParams['lines.linewidth']'' => 1.5 | ||
+ | * Other marker attributes. For ''plot'', all the markers have the same attributes, and for ''scatter'' the attributes can be the same, or specified for each marker | ||
+ | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html|plot(...)]]: //fmt// (see documentation) or ''marker'' and ''markerfacecolor''/''mfc'' (and ''markerfacecoloralt''/''mfcalt'' for dual color markers), ''markersize'', ''markeredgewidth''/''mew'', ''markeredgecolor'', ''fillstyle'' (''full'', ''None'', [[https://matplotlib.org/gallery/lines_bars_and_markers/marker_fillstyle_reference.html|other]]) | ||
+ | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html|scatter(...)]]: ''marker'' (marker type), ''c'' (color), ''s'' (size), ''linewidths'' (linewidth of the marker edges), ''edgecolors'' | ||
* [[https://matplotlib.org/api/colors_api.html|colors]] and colormaps | * [[https://matplotlib.org/api/colors_api.html|colors]] and colormaps | ||
* [[https://matplotlib.org/gallery/color/color_demo.html|color demo]] | * [[https://matplotlib.org/gallery/color/color_demo.html|color demo]] | ||
Line 264: | Line 290: | ||
* ''cmap.set_over(color='k')'': color to be used for high out-of-range values | * ''cmap.set_over(color='k')'': color to be used for high out-of-range values | ||
* ''cmap.set_under(color='k')'': color to be used for low out-of-range values | * ''cmap.set_under(color='k')'': color to be used for low out-of-range values | ||
+ | * [[https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure.colorbar|colorbar]] | ||
+ | * [[https://matplotlib.org/gallery/subplots_axes_and_figures/colorbar_placement.html|Placing colorbars demo]] | ||
+ | * [[https://matplotlib.org/gallery/images_contours_and_fields/contourf_demo.html|contourf + colorbar demo]] | ||
* [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.text.html|text(...)]] and [[https://matplotlib.org/tutorials/text/annotations.html|annotations]] | * [[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.text.html|text(...)]] and [[https://matplotlib.org/tutorials/text/annotations.html|annotations]] | ||
* Some titles: | * Some titles: | ||
Line 281: | Line 310: | ||
* The [[https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html|figure(...)]] and the associated methods | * The [[https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html|figure(...)]] and the associated methods | ||
* The [[https://matplotlib.org/api/axes_api.html|axes]] and the associated methods | * The [[https://matplotlib.org/api/axes_api.html|axes]] and the associated methods | ||
- | * [[https://matplotlib.org/tutorials/introductory/customizing.html#matplotlib-rcparams|matplotlib default settings]] can be queried and updated | + | * [[https://matplotlib.org/tutorials/introductory/customizing.html#matplotlib-rcparams|matplotlib default config/settings]] can be queried and updated |
* example: the default figure size (inches) is ''mpl.rcParams['figure.figsize']'' (''[6.4, 4.8]'') | * example: the default figure size (inches) is ''mpl.rcParams['figure.figsize']'' (''[6.4, 4.8]'') | ||
* current settings' file: ''mpl.matplotlib_fname()'' | * current settings' file: ''mpl.matplotlib_fname()'' | ||
Line 394: | Line 423: | ||
Where: [[http://pandas.pydata.org|Pandas web site]] | Where: [[http://pandas.pydata.org|Pandas web site]] | ||
- | JYP's comment: pandas is supposed to be quite good for loading, processing and plotting time series, without writing custom code. You should at least have a quick look at: | + | JYP's comment: pandas is supposed to be quite good for loading, processing and plotting time series, without writing custom code. It is **very convenient for processing tables in xlsx files** (or csv, etc...). You should at least have a quick look at: |
- | * The [[http://www.scipy-lectures.org/packages/statistics/index.html|Statistics in Python]] tutorial that combines Pandas, [[http://statsmodels.sourceforge.net/|Statsmodels]] and [[http://seaborn.pydata.org/|Seaborn]] | + | |
- | * the cheat sheet on the [[https://www.enthought.com/services/training/pandas-mastery-workshop/|Enthought workshops advertising page]] | + | * Some //Cheat Sheets// (in the following order): |
- | * the cheat sheet on the [[https://github.com/pandas-dev/pandas/tree/master/doc/cheatsheet|github Pandas doc page]] | + | - Basics: [[http://datacamp-community-prod.s3.amazonaws.com/dbed353d-2757-4617-8206-8767ab379ab3|Pandas basics]] (associated with the [[https://www.datacamp.com/community/blog/python-pandas-cheat-sheet|Pandas Cheat Sheet for Data Science in Python]] pandas introduction page) |
+ | - Intermediate: [[https://github.com/pandas-dev/pandas/tree/master/doc/cheatsheet|github Pandas doc page]] | ||
+ | - Advanced: the cheat sheet on the [[https://www.enthought.com/services/training/pandas-mastery-workshop/|Enthought workshops advertising page]] | ||
+ | * Some tutorials: | ||
+ | * [[https://www.datacamp.com/community/blog/python-pandas-cheat-sheet|Pandas Cheat Sheet for Data Science in Python]] pandas introduction page | ||
+ | * The [[http://www.scipy-lectures.org/packages/statistics/index.html|Statistics in Python]] tutorial that combines Pandas, [[http://statsmodels.sourceforge.net/|Statsmodels]] and [[http://seaborn.pydata.org/|Seaborn]] | ||
===== Scipy Lecture Notes ===== | ===== Scipy Lecture Notes ===== |