|
19 | 19 |
|
20 | 20 | from matplotlib.widgets import RadioButtons |
21 | 21 |
|
| 22 | +FREQUENCIES = {'1 Hz': 1, '2 Hz': 2, '4 Hz': 4} |
| 23 | + |
22 | 24 | t = np.arange(0.0, 2.0, 0.01) |
23 | | -s0 = np.sin(2*np.pi*t) |
24 | | -s1 = np.sin(4*np.pi*t) |
25 | | -s2 = np.sin(8*np.pi*t) |
26 | 25 |
|
27 | | -fig, ax = plt.subplot_mosaic( |
| 26 | + |
| 27 | +def f(t, freq): |
| 28 | + return np.sin(2*np.pi*freq*t) |
| 29 | + |
| 30 | +fig, axd = plt.subplot_mosaic( |
28 | 31 | [ |
29 | 32 | ['main', 'freq'], |
30 | 33 | ['main', 'color'], |
|
33 | 36 | width_ratios=[5, 1], |
34 | 37 | layout='constrained', |
35 | 38 | ) |
36 | | -l, = ax['main'].plot(t, s0, lw=2, color='red') |
| 39 | +(line,) = axd['main'].plot(t, f(t, freq=1), lw=2, color='red') |
37 | 40 |
|
38 | | -radio_background = 'lightgoldenrodyellow' |
| 41 | +background_color = '0.95' |
39 | 42 |
|
40 | | -ax['freq'].set_facecolor(radio_background) |
41 | | -radio = RadioButtons(ax['freq'], ('1 Hz', '2 Hz', '4 Hz'), |
42 | | - label_props={'color': 'cmy', 'fontsize': [12, 14, 16]}, |
| 43 | +axd['freq'].set_facecolor(background_color) |
| 44 | +axd['freq'].set_title('Frequency') |
| 45 | +radio = RadioButtons(axd['freq'], labels=list(FREQUENCIES.keys()), |
| 46 | + label_props={'fontsize': [12, 14, 16]}, |
43 | 47 | radio_props={'s': [16, 32, 64]}) |
44 | 48 |
|
45 | 49 |
|
46 | | -def hzfunc(label): |
47 | | - hzdict = {'1 Hz': s0, '2 Hz': s1, '4 Hz': s2} |
48 | | - ydata = hzdict[label] |
49 | | - l.set_ydata(ydata) |
| 50 | +def update_frequency(label): |
| 51 | + ydata = f(t, freq=FREQUENCIES[label]) |
| 52 | + line.set_ydata(ydata) |
50 | 53 | fig.canvas.draw() |
51 | | -radio.on_clicked(hzfunc) |
| 54 | +radio.on_clicked(update_frequency) |
52 | 55 |
|
53 | | -ax['color'].set_facecolor(radio_background) |
| 56 | + |
| 57 | +axd['color'].set_facecolor(background_color) |
| 58 | +axd['color'].set_title('Color') |
54 | 59 | radio2 = RadioButtons( |
55 | | - ax['color'], ('red', 'blue', 'green'), |
| 60 | + axd['color'], ('red', 'blue', 'green'), |
56 | 61 | label_props={'color': ['red', 'blue', 'green']}, |
57 | 62 | radio_props={ |
58 | 63 | 'facecolor': ['red', 'blue', 'green'], |
59 | 64 | 'edgecolor': ['darkred', 'darkblue', 'darkgreen'], |
60 | 65 | }) |
61 | 66 |
|
62 | 67 |
|
63 | | -def colorfunc(label): |
64 | | - l.set_color(label) |
| 68 | +def update_color(label): |
| 69 | + line.set_color(label) |
65 | 70 | fig.canvas.draw() |
66 | | -radio2.on_clicked(colorfunc) |
| 71 | +radio2.on_clicked(update_color) |
| 72 | + |
67 | 73 |
|
68 | | -ax['linestyle'].set_facecolor(radio_background) |
69 | | -radio3 = RadioButtons(ax['linestyle'], ('-', '--', '-.', ':')) |
| 74 | +axd['linestyle'].set_facecolor(background_color) |
| 75 | +axd['linestyle'].set_title('Linestyle') |
| 76 | +radio3 = RadioButtons(axd['linestyle'], ('solid', 'dashed', 'dashdot', 'dotted')) |
70 | 77 |
|
71 | 78 |
|
72 | | -def stylefunc(label): |
73 | | - l.set_linestyle(label) |
| 79 | +def update_linestyle(label): |
| 80 | + line.set_linestyle(label) |
74 | 81 | fig.canvas.draw() |
75 | | -radio3.on_clicked(stylefunc) |
| 82 | +radio3.on_clicked(update_linestyle) |
76 | 83 |
|
77 | 84 | plt.show() |
78 | 85 |
|
|
0 commit comments