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:matplotlib_by_jyp [2021/02/26 11:45] jypeter More gallery links updates |
other:python:matplotlib_by_jyp [2023/09/27 12:08] jypeter [Working with matplotlib (JYP version)] Added link to pdf cheatsheets |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Working with matplotlib (JYP version) ====== | ====== Working with matplotlib (JYP version) ====== | ||
+ | |||
+ | <note tip>Note: [[https://matplotlib.org/cheatsheets/|Matplotlib cheatsheets]] | ||
+ | |||
+ | \\ The [[https://github.com/matplotlib/cheatsheets#cheatsheets-for-matplotlib-users|pdf version of the cheatsheets]] is available on the github page</note> | ||
**Summary**: there are lots of python libraries that you can use for plotting, but Matplotlib has become a //de facto// standard | **Summary**: there are lots of python libraries that you can use for plotting, but Matplotlib has become a //de facto// standard | ||
Line 116: | Line 120: | ||
* 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** (see also [[https://matplotlib.org/examples/showcase/anatomy.html|Anatomy of a figure]]): | + | * **X and Y axes parameters** (see also [[https://matplotlib.org/stable/gallery/showcase/anatomy.html|Anatomy of a figure]]): |
* **Axis range**: ''my_plot.set_xlim(x_leftmost_value, x_rightmost_value)'' | * **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) | * Use the leftmost and rightmost values to specify the orientation of the axis (i.e the rightmost value can be smaller than the leftmost) | ||
Line 124: | Line 128: | ||
* [[https://stackoverflow.com/questions/35479508/cartopy-set-xlabel-set-ylabel-not-ticklabels|Trick source]] | * [[https://stackoverflow.com/questions/35479508/cartopy-set-xlabel-set-ylabel-not-ticklabels|Trick source]] | ||
* Trick needs to be used with ''cartopy 0.17.0''\\ Remember to update/remove this information in the future | * Trick needs to be used with ''cartopy 0.17.0''\\ Remember to update/remove this information in the future | ||
- | * Major (and minor) **tick marks location**: ''my_plot.set_xticks(x_ticks_values, minor=False)'' | + | * Major (and minor) **tick marks location**: ''my_plot.set_xticks(x_ticks_values, minor=False)'' ([[https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_xticks.html|set_xticks]]) |
* Use an empty list if you don't want tick marks: ''my_plot.set_xticks([])'' | * 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)'' | + | * **Tick labels**: ''my_plot.set_xticklabels(x_tick_labels, minor=False, fontsize=ticklabels_fontsize)'' ([[https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_xticklabels.html|set_xticklabels]]) |
- | * ''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 | + | * If you do not specify labels, the //default labels// will just be the values specifying the ticks' location |
+ | * ''x_tick_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 | ||
+ | * The default numerical labels may be too long, due to numerical approximations. You can try to explicitly round the values, or generate correct label strings from the values\\ <code>>>> x_tick_values = np.arange(0, 1, 0.2) | ||
+ | >>> x_tick_values.tolist() | ||
+ | [0.0, 0.2, 0.4, 0.6000000000000001, 0.8] | ||
+ | >>> x_tick_values.round(decimals=1).tolist() | ||
+ | [0.0, 0.2, 0.4, 0.6, 0.8] | ||
+ | >>> x_tick_labels = [ '%.1f' % (t_val,) for t_val in x_tick_values ] | ||
+ | >>> x_tick_labels | ||
+ | ['0.0', '0.2', '0.4', '0.6', '0.8'] | ||
+ | >>> x_tick_labels[0] = 'START' | ||
+ | >>> x_tick_labels[-1] = 'END' | ||
+ | >>> x_tick_labels | ||
+ | ['START', '0.2', '0.4', '0.6', 'END'] | ||
+ | </code> | ||
+ | * You can also use fancy [[https://matplotlib.org/stable/gallery/ticks_and_spines/tick-formatters.html|tick formatters]] | ||
* Many more options for ticks, labels, orientation, ... | * Many more options for ticks, labels, orientation, ... | ||
* **Grid lines**: | * **Grid lines**: | ||
Line 143: | Line 162: | ||
* [[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/stable/gallery/lines_bars_and_markers/marker_reference.htm|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/stable/gallery/lines_bars_and_markers/marker_reference.htm|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/stable/api/colors_api.html|colors]] and colormaps |
* [[https://matplotlib.org/stable/gallery/color/color_demo.html|color demo]] | * [[https://matplotlib.org/stable/gallery/color/color_demo.html|color demo]] | ||
- | * [[https://matplotlib.org/examples/color/named_colors.html|named colors]] | + | * [[https://matplotlib.org/stable/gallery/color/named_colors.html#sphx-glr-gallery-color-named-colors-py|named colors]] |
+ | * [[https://www.w3schools.com/colors/colors_picker.asp|HTML color picker]] and different ways of choosing 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'' | * Number of colors in the //my_cmap// colormap (usually 256): ''my_cmap.N'' | ||
Line 167: | Line 187: | ||
* ''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)'' | * ''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)'' | ||
* ''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)'' | * ''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]] | + | * [[https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.colorbar|colorbar]] (see also the [[https://matplotlib.org/stable/api/colorbar_api.html|colorbar api]]) |
* [[https://matplotlib.org/stable/gallery/subplots_axes_and_figures/colorbar_placement.html|Placing colorbars demo]] | * [[https://matplotlib.org/stable/gallery/subplots_axes_and_figures/colorbar_placement.html|Placing colorbars demo]] | ||
* [[https://matplotlib.org/stable/gallery/images_contours_and_fields/contourf_demo.html|contourf + colorbar demo]] | * [[https://matplotlib.org/stable/gallery/images_contours_and_fields/contourf_demo.html|contourf + colorbar demo]] | ||
Line 176: | Line 196: | ||
* [[https://matplotlib.org/stable/gallery/text_labels_and_annotations/titles_demo.html|Title and labels positions demo]] | * [[https://matplotlib.org/stable/gallery/text_labels_and_annotations/titles_demo.html|Title and labels positions demo]] | ||
* ''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'') | ||
- | * [[https://matplotlib.org/api/text_api.html#matplotlib.text.Text|all the text properties]] | + | * [[https://matplotlib.org/stable/api/text_api.html|all the text properties]] |
- | * [[https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.legend|legend(...)]] ([[https://matplotlib.org/examples/pylab_examples/legend_demo3.html|legend demo]], [[https://matplotlib.org/users/legend_guide.html|advanced legend guide]]) | + | * [[https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html|legend(...)]] ([[https://matplotlib.org/stable/gallery/text_labels_and_annotations/legend_demo.html|legend demo]], [[https://matplotlib.org/stable/tutorials/intermediate/legend_guide.html|advanced legend guide]]) |
* The legend will //show// the lines (or other objects) that were associated with a //label// with the ''label='' keyword when creating/updating a plot | * The legend will //show// the lines (or other objects) that were associated with a //label// with the ''label='' keyword when creating/updating a plot | ||
* If there are some elements of a plot that you do not want to associate with a legend (e.g. there are several lines with the same color and markers, but you want to plot the legend only once), do not specify a ''label='' keyword for these elements, or add a ''_'' at the front of the label strings | * If there are some elements of a plot that you do not want to associate with a legend (e.g. there are several lines with the same color and markers, but you want to plot the legend only once), do not specify a ''label='' keyword for these elements, or add a ''_'' at the front of the label strings | ||
Line 232: | Line 252: | ||
[[https://stackoverflow.com/questions/9797520/masking-part-of-a-contourf-plot-in-matplotlib|trick source]] | [[https://stackoverflow.com/questions/9797520/masking-part-of-a-contourf-plot-in-matplotlib|trick source]] | ||
+ | ===== Unsorted matplotlib stuff ===== | ||
+ | |||
+ | Some useful notes and links that cannot be placed (yet) in a section of the main page | ||
+ | |||
+ | ==== Plotting arcs (segments of ellipses) ==== | ||
+ | |||
+ | * [[https://matplotlib.org/stable/api/_as_gen/matplotlib.patches.Arc.html|Offical patches.Arc documentation]] | ||
+ | * A nice [[https://stackoverflow.com/questions/54849976/can-someone-explain-the-different-parameters-in-matplotlib-patches-arc|ellipses and arcs tutorial]] on stackoverflow | ||
+ | |||
+ | ==== Using hatches with contourf ==== | ||
+ | |||
+ | * [[https://matplotlib.org/stable/gallery/shapes_and_collections/hatch_style_reference.html|Hatch style reference]] | ||
+ | * [[https://matplotlib.org/stable/gallery/shapes_and_collections/hatch_demo.html|Hatch demo]] | ||
+ | * [[https://matplotlib.org/stable/gallery/images_contours_and_fields/contourf_hatching.html|Contourf hatching]] | ||
+ | * //Collections// trick for [[https://fantashit.com/hatching-color-in-contourf-function/|changing the colors of hatches]] | ||
/* standard page footer */ | /* standard page footer */ |