Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
other:python:jyp_steps [2019/06/26 14:50] – [Matplotlib] More details about subplots_adjust jypeter | other:python:jyp_steps [2019/08/30 16:11] – [Useful matplotlib reference pages] jypeter |
---|
* do not forget to disable the ticks where there is no space to plot them: ''my_plot.set_xticks([])'' | * 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 | * ''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]] |
* ''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. |
==== 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 | * [[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]]) |
* ''mpl.rcParams['lines.linewidth']'' => 1.5 | * ''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 | * 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.plot.html|plot(...)]]: //fmt// (see documentation) or ''marker'' and ''markerfacecolor''/''mfc'' (and ''markerfacecoloralt''/''mfcalt'' for dual color markers), ''markersize'', ''markeredgewidth''/''mew'', ''markeredgecolor'' (use ''markeredgecolor='none''' if you don't want to plot the edge of the markers), ''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/_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/examples/color/named_colors.html|named colors]] | * [[https://matplotlib.org/examples/color/named_colors.html|named colors]] |
* Reverting the colors: add ''_r'' at the end of the colormap name | * Reverting the colors: add ''_r'' at the end of the colormap name |
| * Number of colors in the //my_cmap// colormap (usually 256): ''my_cmap.N'' |
| * Accessing the RGB color definition by index, from ''0'' to ''my_cmap.N - 1''. Note that the index will //saturate// below ''0'' and above ''my_cmap.N - 1''\\ <code>>>> my_cmap.N |
| 256 |
| >>> my_cmap(-1) # Same as ano_cmap(0) |
| (0.3686274509803922, 0.30980392156862746, 0.6352941176470588, 1.0) |
| >>> my_cmap(0) |
| (0.3686274509803922, 0.30980392156862746, 0.6352941176470588, 1.0) |
| >>> my_cmap(1) |
| (0.36186082276047676, 0.3185697808535179, 0.6394463667820068, 1.0) |
| >>> my_cmap(255) |
| (0.6196078431372549, 0.00392156862745098, 0.25882352941176473, 1.0) |
| >>> my_cmap(256) # Same as ano_cmap(255) |
| (0.6196078431372549, 0.00392156862745098, 0.25882352941176473, 1.0) |
| >>> my_cmap(257) # Same as ano_cmap(255) |
| (0.6196078431372549, 0.00392156862745098, 0.25882352941176473, 1.0) |
| </code> |
* Special colormap colors | * Special colormap colors |
* ''cmap.set_bad(color='k')'': color to be used for masked values | * ''my_cmap.set_bad(color='k')'': color to be used for **masked** values |
* ''cmap.set_over(color='k')'': color to be used for high out-of-range values | * ''my_cmap.set_over(color='k')'': color to be used for //high out-of-range values// **if** ''extend'' is specified and is //'both'// or //'max'//. Default color is ''my_cmap(my_cmap.N - 1)'' |
* ''cmap.set_under(color='k')'': color to be used for low out-of-range values | * ''my_cmap.set_under(color='k')'': color to be used for //low out-of-range values// **if** ''extend'' is specified and is //'both'// or //'min'//. Default color is ''my_cmap(0)'' |
* [[https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure.colorbar|colorbar]] and ([[https://matplotlib.org/gallery/images_contours_and_fields/contourf_demo.html|contourf + colorbar demo]]) | * [[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: |
* [[https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure.suptitle|Figure title]]: ''my_figure.suptitle('Figure title', ...)'' | * [[https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure.suptitle|Figure title]]: ''my_figure.suptitle('Figure title', x=xloc_in_normalized_coordinates, y=yloc_in_normalized_coordinates, ...)'' |
* [[https://matplotlib.org/api/axes_api.html#axis-labels-title-and-legend|Axis Labels, title, and legend]]: ''my_plot.set_title('Plot title', ...)'' | * [[https://matplotlib.org/api/axes_api.html#axis-labels-title-and-legend|Axis Labels, title, and legend]]: ''my_plot.set_title('Plot title', ...)'' |
* ''fontsize'': size in points, or (better!) string specifying a relative size (''xx-small'', ''x-small'', ''small'', ''medium'', ''large'', ''x-large'', ''xx-large'') | * ''fontsize'': size in points, or (better!) string specifying a relative size (''xx-small'', ''x-small'', ''small'', ''medium'', ''large'', ''x-large'', ''xx-large'') |
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 ===== |