|
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') |
| 40 | +axd['main'].set(xlabel="Time (s)", ylabel="Amplitude", title="Sine Wave") |
37 | 41 |
|
38 | | -radio_background = 'lightgoldenrodyellow' |
| 42 | +background_color = '0.95' |
39 | 43 |
|
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]}, |
| 44 | +axd['freq'].set_facecolor(background_color) |
| 45 | +axd['freq'].set_title('Frequency') |
| 46 | +radio = RadioButtons(axd['freq'], labels=list(FREQUENCIES.keys()), |
| 47 | + label_props={'fontsize': [12, 14, 16]}, |
43 | 48 | radio_props={'s': [16, 32, 64]}) |
44 | 49 |
|
45 | 50 |
|
46 | | -def hzfunc(label): |
47 | | - hzdict = {'1 Hz': s0, '2 Hz': s1, '4 Hz': s2} |
48 | | - ydata = hzdict[label] |
49 | | - l.set_ydata(ydata) |
| 51 | +def update_frequency(label): |
| 52 | + ydata = f(t, freq=FREQUENCIES[label]) |
| 53 | + line.set_ydata(ydata) |
50 | 54 | fig.canvas.draw() |
51 | | -radio.on_clicked(hzfunc) |
| 55 | +radio.on_clicked(update_frequency) |
52 | 56 |
|
53 | | -ax['color'].set_facecolor(radio_background) |
| 57 | + |
| 58 | +axd['color'].set_facecolor(background_color) |
| 59 | +axd['color'].set_title('Color') |
54 | 60 | radio2 = RadioButtons( |
55 | | - ax['color'], ('red', 'blue', 'green'), |
| 61 | + axd['color'], ('red', 'blue', 'green'), |
56 | 62 | label_props={'color': ['red', 'blue', 'green']}, |
57 | 63 | radio_props={ |
58 | 64 | 'facecolor': ['red', 'blue', 'green'], |
59 | 65 | 'edgecolor': ['darkred', 'darkblue', 'darkgreen'], |
60 | 66 | }) |
61 | 67 |
|
62 | 68 |
|
63 | | -def colorfunc(label): |
64 | | - l.set_color(label) |
| 69 | +def update_color(label): |
| 70 | + line.set_color(label) |
65 | 71 | fig.canvas.draw() |
66 | | -radio2.on_clicked(colorfunc) |
| 72 | +radio2.on_clicked(update_color) |
| 73 | + |
67 | 74 |
|
68 | | -ax['linestyle'].set_facecolor(radio_background) |
69 | | -radio3 = RadioButtons(ax['linestyle'], ('-', '--', '-.', ':')) |
| 75 | +axd['linestyle'].set_facecolor(background_color) |
| 76 | +axd['linestyle'].set_title('Linestyle') |
| 77 | +radio3 = RadioButtons(axd['linestyle'], ('solid', 'dashed', 'dashdot', 'dotted')) |
70 | 78 |
|
71 | 79 |
|
72 | | -def stylefunc(label): |
73 | | - l.set_linestyle(label) |
| 80 | +def update_linestyle(label): |
| 81 | + line.set_linestyle(label) |
74 | 82 | fig.canvas.draw() |
75 | | -radio3.on_clicked(stylefunc) |
| 83 | +radio3.on_clicked(update_linestyle) |
76 | 84 |
|
77 | 85 | plt.show() |
78 | 86 |
|
|
0 commit comments