User Tools

Site Tools


other:python:matplotlib_by_jyp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
other:python:matplotlib_by_jyp [2021/02/26 12:45] – More gallery links updates jypeterother:python:matplotlib_by_jyp [2023/10/26 10:39] (current) – [Useful matplotlib reference pages] jypeter
Line 1: Line 1:
 ====== Working with matplotlib (JYP version) ====== ====== Working with matplotlib (JYP version) ======
 +
 +<note tip>Note: [[https://matplotlib.org/cheatsheets/|Matplotlib cheatsheets]] ([[https://github.com/matplotlib/cheatsheets#cheatsheets-for-matplotlib-users|pdf version]])</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 32: Line 34:
         * if you need several display windows at the same time, create several figures!\\ <code>win_1 = plt.figure()         * if you need several display windows at the same time, create several figures!\\ <code>win_1 = plt.figure()
 win_2 = plt.figure()</code> win_2 = plt.figure()</code>
-        * the [[http://matplotlib.org/faq/usage_faq.html#parts-of-a-figure|parts of a figure]] are usually positioned in //normalized coordinates//: ''(0, 0)'' is the bottom left of the figure, and ''(1, 1)'' is the top right+        * the [[https://matplotlib.org/stable/gallery/showcase/anatomy.html|parts of a figure]] are usually positioned in //normalized coordinates//: ''(0, 0)'' is the bottom left of the figure, and ''(1, 1)'' is 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 do 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 then try to //fill// the normalized coordinates space of the figure           * If you do 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 then try to //fill// the normalized coordinates space of the figure
Line 39: Line 41:
             * The specified ''width'' and ''height'' are supposed to be in inches (1 inch = 2.54 cm)             * The specified ''width'' and ''height'' are supposed to be in inches (1 inch = 2.54 cm)
             * ''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 details about standard paper sizes)             * ''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 details about standard paper sizes)
-      * a Matplotlib **//Axis//** is a **plot** inside a Figure... [[http://matplotlib.org/faq/usage_faq.html#parts-of-a-figure|More details]]+      * a Matplotlib **//Axes//** (not to be confused with an //**axis**//is a **(sub-)plot** inside a Figure... [[https://matplotlib.org/stable/api/axes_api.html|(much) More details]]
         * reserve space for **one plot** that will use most of the available area of the figure/page:         * 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)'' or ''my_plot = my_page.subplot**s**()''           * ''my_plot = my_page.add_subplot(1, 1, 1)'' or ''my_plot = my_page.subplot**s**()''
Line 116: Line 118:
     * 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 126:
         * [[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 tickslocation 
 +      * ''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 160:
       * [[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 185:
       * ''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]]
 +    * Changing the font size of a colorbar (i.e. //changing [[https://matplotlib.org/stable/api/axes_api.html#ticks-and-tick-labels|ticks and tick labels]]//):
 +      * This can be done by manipulating the properties of the //Axes// where the colorbar is plotted\\ e.g. change the tick labels font size with\\ ''cb.ax.tick_params(labelsize='xx-large')'' (where ''cb'' is a //colorbar// object)
   * [[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 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 */
other/python/matplotlib_by_jyp.1614339939.txt.gz · Last modified: 2021/02/26 12:45 by jypeter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki