1111
1212import numpy as np
1313import matplotlib .pyplot as plt
14+ import matplotlib .colors as mcolors
1415
1516# Fixing random state for reproducibility
1617np .random .seed (19680801 )
@@ -26,15 +27,19 @@ def plot_scatter(ax, prng, nb_samples=100):
2627 return ax
2728
2829
29- def plot_colored_sinusoidal_lines (ax ):
30- """Plot sinusoidal lines with colors following the style color cycle."""
31- L = 2 * np .pi
32- x = np .linspace (0 , L )
30+ def plot_colored_lines (ax ):
31+ """Plot lines with colors following the style color cycle."""
32+ t = np .linspace (- 10 , 10 , 100 )
33+
34+ def sigmoid (t , t0 ):
35+ return 1 / (1 + np .exp (- (t - t0 )))
36+
3337 nb_colors = len (plt .rcParams ['axes.prop_cycle' ])
34- shift = np .linspace (0 , L , nb_colors , endpoint = False )
35- for s in shift :
36- ax .plot (x , np .sin (x + s ), '-' )
37- ax .set_xlim ([x [0 ], x [- 1 ]])
38+ shifts = np .linspace (- 5 , 5 , nb_colors )
39+ amplitudes = np .linspace (1 , 1.5 , nb_colors )
40+ for t0 , a in zip (shifts , amplitudes ):
41+ ax .plot (t , a * sigmoid (t , t0 ), '-' )
42+ ax .set_xlim (- 10 , 10 )
3843 return ax
3944
4045
@@ -104,40 +109,43 @@ def plot_figure(style_label=""):
104109 # across the different figures.
105110 prng = np .random .RandomState (96917002 )
106111
107- # Tweak the figure size to be better suited for a row of numerous plots:
108- # double the width and halve the height. NB: use relative changes because
109- # some styles may have a figure size different from the default one.
110- (fig_width , fig_height ) = plt .rcParams ['figure.figsize' ]
111- fig_size = [fig_width * 2 , fig_height / 2 ]
112-
113112 fig , axs = plt .subplots (ncols = 6 , nrows = 1 , num = style_label ,
114- figsize = fig_size , squeeze = True )
115- axs [0 ].set_ylabel (style_label )
113+ figsize = (14.8 , 2.7 ), constrained_layout = True )
114+
115+ # make a suptitle, in the same style for all subfigures,
116+ # except those with dark backgrounds, which get a lighter color:
117+ background_color = mcolors .rgb_to_hsv (
118+ mcolors .to_rgb (plt .rcParams ['figure.facecolor' ]))[2 ]
119+ if background_color < 0.5 :
120+ title_color = [0.8 , 0.8 , 1 ]
121+ else :
122+ title_color = np .array ([19 , 6 , 84 ]) / 256
123+ fig .suptitle (style_label , x = 0.01 , ha = 'left' , color = title_color ,
124+ fontsize = 14 , fontfamily = 'DejaVu Sans' , fontweight = 'normal' )
116125
117126 plot_scatter (axs [0 ], prng )
118127 plot_image_and_patch (axs [1 ], prng )
119128 plot_bar_graphs (axs [2 ], prng )
120129 plot_colored_circles (axs [3 ], prng )
121- plot_colored_sinusoidal_lines (axs [4 ])
130+ plot_colored_lines (axs [4 ])
122131 plot_histograms (axs [5 ], prng )
123132
124- fig .tight_layout ()
125-
126- return fig
127-
128133
129134if __name__ == "__main__" :
130135
131136 # Setup a list of all available styles, in alphabetical order but
132137 # the `default` and `classic` ones, which will be forced resp. in
133138 # first and second position.
139+ # styles with leading underscores are for internal use such as testing
140+ # and plot types gallery. These are excluded here.
134141 style_list = ['default' , 'classic' ] + sorted (
135- style for style in plt .style .available if style != 'classic' )
142+ style for style in plt .style .available
143+ if style != 'classic' and not style .startswith ('_' ))
136144
137145 # Plot a demonstration figure for every available style sheet.
138146 for style_label in style_list :
139147 with plt .rc_context ({"figure.max_open_warning" : len (style_list )}):
140148 with plt .style .context (style_label ):
141- fig = plot_figure (style_label = style_label )
149+ plot_figure (style_label = style_label )
142150
143151 plt .show ()
0 commit comments