8000 Merge pull request #19265 from ianhi/style-slider-for-real · matplotlib/matplotlib@2a7d9bf · GitHub
[go: up one dir, main page]

Skip to content

Commit 2a7d9bf

Browse files
authored
Merge pull request #19265 from ianhi/style-slider-for-real
Change styling of slider widgets
2 parents 4b7b2c9 + f5dcedd commit 2a7d9bf

File tree

5 files changed

+205
-39
lines changed

5 files changed

+205
-39
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
Updated the appearance of Slider widgets
2+
----------------------------------------
3+
4+
The appearance of `~.Slider` and `~.RangeSlider` widgets
5+
were updated and given new styling parameters for the
6+
added handles.
7+
8+
.. plot::
9+
10+
import matplotlib.pyplot as plt
11+
from matplotlib.widgets import Slider
12+
13+
plt.figure(figsize=(4, 2))
14+
ax_old = plt.axes([0.2, 0.65, 0.65, 0.1])
15+
ax_new = plt.axes([0.2, 0.25, 0.65, 0.1])
16+
Slider(ax_new, "New", 0, 1)
17+
18+
ax = ax_old
19+
valmin = 0
20+
valinit = 0.5
21+
ax.set_xlim([0, 1])
22+
ax_old.axvspan(valmin, valinit, 0, 1)
23+
ax.axvline(valinit, 0, 1, color="r", lw=1)
24+
ax.set_xticks([])
25+
ax.set_yticks([])
26+
ax.text(
27+
-0.02,
28+
0.5,
29+
"Old",
30+
transform=ax.transAxes,
31+
verticalalignment="center",
32+
horizontalalignment="right",
33+
)
34+
35+
ax.text(
36+
1.02,
37+
0.5,
38+
"0.5",
39+
transform=ax.transAxes,
40+
verticalalignment="center",
41+
horizontalalignment="left",
42+
)

examples/widgets/slider_demo.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,11 @@ def f(t, amplitude, frequency):
3232
line, = plt.plot(t, f(t, init_amplitude, init_frequency), lw=2)
3333
ax.set_xlabel('Time [s]')
3434

35-
axcolor = 'lightgoldenrodyellow'
36-
ax.margins(x=0)
37-
3835
# adjust the main plot to make room for the sliders
3936
plt.subplots_adjust(left=0.25, bottom=0.25)
4037

4138
# Make a horizontal slider to control the frequency.
42-
axfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)
39+
axfreq = plt.axes([0.25, 0.1, 0.65, 0.03])
4340
freq_slider = Slider(
4441
ax=axfreq,
4542
label='Frequency [Hz]',
@@ -49,7 +46,7 @@ def f(t, amplitude, frequency):
4946
)
5047

5148
# Make a vertically oriented slider to control the amplitude
52-
axamp = plt.axes([0.1, 0.25, 0.0225, 0.63], facecolor=axcolor)
49+
axamp = plt.axes([0.1, 0.25, 0.0225, 0.63])
5350
amp_slider = Slider(
5451
ax=axamp,
5552
label="Amplitude",
@@ -72,7 +69,7 @@ def update(val):
7269

7370
# Create a `matplotlib.widgets.Button` to reset the sliders to initial values.
7471
resetax = plt.axes([0.8, 0.025, 0.1, 0.04])
75-
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
72+
button = Button(resetax, 'Reset', hovercolor='0.975')
7673

7774

7875
def reset(event):

examples/widgets/slider_snap_demo.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@
2828
plt.subplots_adjust(bottom=0.25)
2929
l, = plt.plot(t, s, lw=2)
3030

31-
slider_bkd_color = 'lightgoldenrodyellow'
32-
ax_freq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=slider_bkd_color)
33-
ax_amp = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=slider_bkd_color)
31+
ax_freq = plt.axes([0.25, 0.1, 0.65, 0.03])
32+
ax_amp = plt.axes([0.25, 0.15, 0.65, 0.03])
3433

3534
# define the values to use for snapping
3635
allowed_amplitudes = np.concatenate([np.linspace(.1, 5, 100), [6, 7, 8, 9]])
@@ -60,7 +59,7 @@ def update(val):
6059
samp.on_changed(update)
6160

6261
ax_reset = plt.axes([0.8, 0.025, 0.1, 0.04])
63-
button = Button(ax_reset, 'Reset', color=slider_bkd_color, hovercolor='0.975')
62+
button = Button(ax_reset, 'Reset', hovercolor='0.975')
6463

6564

6665
def reset(event):

lib/matplotlib/tests/test_widgets.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ def test_slider_horizontal_vertica 1E0A l():
437437
assert slider.val == 10
438438
# check the dimension of the slider patch in axes units
439439
box = slider.poly.get_extents().transformed(ax.transAxes.inverted())
440-
assert_allclose(box.bounds, [0, 0, 10/24, 1])
440+
assert_allclose(box.bounds, [0, .25, 10/24, .5< E45C /span>])
441441

442442
fig, ax = plt.subplots()
443443
slider = widgets.Slider(ax=ax, label='', valmin=0, valmax=24,
@@ -446,7 +446,7 @@ def test_slider_horizontal_vertical():
446446
assert slider.val == 10
447447
# check the dimension of the slider patch in axes units
448448
box = slider.poly.get_extents().transformed(ax.transAxes.inverted())
449-
assert_allclose(box.bounds, [0, 0, 1, 10/24])
449+
assert_allclose(box.bounds, [.25, 0, .5, 10/24])
450450

451451

452452
@pytest.mark.parametrize("orientation", ["horizontal", "vertical"])
@@ -463,15 +463,15 @@ def test_range_slider(orientation):
463463
valinit=[0.1, 0.34]
464464
)
465465
box = slider.poly.get_extents().transformed(ax.transAxes.inverted())
466-
assert_allclose(box.get_points().flatten()[idx], [0.1, 0, 0.34, 1])
466+
assert_allclose(box.get_points().flatten()[idx], [0.1, 0.25, 0.34, 0.75])
467467

468468
# Check initial value is set correctly
469469
assert_allclose(slider.val, (0.1, 0.34))
470470

471471
slider.set_val((0.2, 0.6))
472472
assert_allclose(slider.val, (0.2, 0.6))
473473
box = slider.poly.get_extents().transformed(ax.transAxes.inverted())
474-
assert_allclose(box.get_points().flatten()[idx], [0.2, 0, 0.6, 1])
474+
assert_allclose(box.get_points().flatten()[idx], [0.2, .25, 0.6, .75])
475475

476476
slider.set_val((0.2, 0.1))
477477
assert_allclose(slider.val, (0.1, 0.2))

0 commit comments

Comments
 (0)
0