11
11
12
12
import numpy as np
13
13
import matplotlib .pyplot as plt
14
+ import matplotlib .colors as mcolors
14
15
15
16
# Fixing random state for reproducibility
16
17
np .random .seed (19680801 )
@@ -26,15 +27,19 @@ def plot_scatter(ax, prng, nb_samples=100):
26
27
return ax
27
28
28
29
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
+
33
37
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 )
38
43
return ax
39
44
40
45
@@ -104,40 +109,43 @@ def plot_figure(style_label=""):
104
109
# across the different figures.
105
110
prng = np .random .RandomState (96917002 )
106
111
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
-
113
112
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' )
116
125
117
126
plot_scatter (axs [0 ], prng )
118
127
plot_image_and_patch (axs [1 ], prng )
119
128
plot_bar_graphs (axs [2 ], prng )
120
129
plot_colored_circles (axs [3 ], prng )
121
- plot_colored_sinusoidal_lines (axs [4 ])
130
+ plot_colored_lines (axs [4 ])
122
131
plot_histograms (axs [5 ], prng )
123
132
124
- fig .tight_layout ()
125
-
126
- return fig
127
-
128
133
129
134
if __name__ == "__main__" :
130
135
131
136
# Setup a list of all available styles, in alphabetical order but
132
137
# the `default` and `classic` ones, which will be forced resp. in
133
138
# 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.
134
141
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 ('_' ))
136
144
137
145
# Plot a demonstration figure for every available style sheet.
138
146
for style_label in style_list :
139
147
with plt .rc_context ({"figure.max_open_warning" : len (style_list )}):
140
148
with plt .style .context (style_label ):
141
- fig = plot_figure (style_label = style_label )
149
+ plot_figure (style_label = style_label )
142
150
143
151
plt .show ()
0 commit comments