Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions mpl_animators/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,14 +350,24 @@ def _add_widgets(self):
horizontalalignment="center",
verticalalignment="center")

slider_range = self.slider_ranges[i]
rng = np.asarray(slider_range)
vfmt = '%4.0f' if np.issubdtype(rng.dtype, np.integer) else '%4.1f'
allowed_values = None if isinstance(slider_range, (list, tuple)) and rng.size == 2 else rng
if allowed_values is None:
vmin, vmax, vstep = rng[0], rng[-1]-1, 1
else:
vmin, vmax, vstep = rng[0], rng[-1], allowed_values
sframe = widgets.Slider(self.sliders[-1], "",
self.slider_ranges[i][0],
self.slider_ranges[i][-1]-1,
valinit=self.slider_ranges[i][0],
valfmt='%4.1f')
vmin,
vmax,
valinit=vmin,
valstep=vstep,
valfmt=vfmt)
sframe.on_changed(partial(self._slider_changed, slider=sframe))
sframe.slider_ind = i
sframe.cval = sframe.val
sframe.allowed_values = allowed_values
self.sliders[-1]._slider = sframe

self.slider_buttons.append(
Expand Down Expand Up @@ -404,6 +414,9 @@ def _step(self, slider):
s = slider
if s.val >= s.valmax:
s.set_val(s.valmin)
elif s.allowed_values is not None:
idx = int(np.searchsorted(s.allowed_values, s.val, side='right'))
s.set_val(s.allowed_values[min(idx, len(s.allowed_values)-1)])
else:
s.set_val(s.val+1)
self.fig.canvas.draw()
Expand All @@ -412,6 +425,9 @@ def _previous(self, slider):
s = slider
if s.val <= s.valmin:
s.set_val(s.valmax)
elif s.allowed_values is not None:
idx = int(np.searchsorted(s.allowed_values, s.val, side='left')) - 1
s.set_val(s.allowed_values[max(idx, 0)])
else:
s.set_val(s.val-1)
self.fig.canvas.draw()
Expand Down
28 changes: 14 additions & 14 deletions mpl_animators/tests/figure_hashes_mpl_3109_ft_261_astropy_720.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{
"mpl_animators.tests.test_basefuncanimator.test_lineanimator_figure": "6865a446680cb7088d71becd653e3c9e9e8e982d71956c95f690d52365bfe106",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "7cf4b83a10ff179afd40d142860edfac340b922f42647eeae5ae9426627a6c63",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_clip_interval": "f03cf2632d825991cdfa5c5a15542fc53dc3a90d29cb21dabe858365f3f8c4b1",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "14fc82e6778a7725092a691f210f05420e5669099fe8cb21260fd44336e57f8e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "6d328b74049bb415245901d033efdc103b55b11156a94e483da3c54615057c4b",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "eca32f981221be9268155d12c3662891951516ea1166a9a17c239eedb4b28c92",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "1ac74e4adb0fca87e99dee372842302130a90b8c5d2547b4ed9e14a60c9b8e96",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "7dd4f77842219e790df3297773e581382164b00f0dc72c40379f5fca33ed4c36",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "67fb82ca58a293bbcebcc06432a919c1aed54fb671a0be0e9d9289645d7897c0",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "0618fba2b4285904d3594b4b3d76ebd56337cf2ad4c00aa568ac111f6d3e52aa",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "ae635463aaa2da4d494e9e90f040d39adf452eda92ad5f1c988b5be0bf437185",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params": "874857db23b36b027f8a4b3e5d810d0b0f283583360494486e3775c1688ef7ce",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "536034d8e761ef5d2fdfbf8911c4ab9bbc96308328594befb44d0837eccd671e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "6dacd902ec7ac3e9b34dac8554ef2a83a5b3a12ad5ddf63858511ac6fe02d417"
"mpl_animators.tests.test_basefuncanimator.test_lineanimator_figure": "b530bbb746b26dc8212ff4bbd71ce5f76995dfc5c03521f0e08c58ba9f692ba2",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "a3f9fadc3d11ea11429a93f927a3d288bf1046ec8fd764d2e947d698d47bd08c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_clip_interval": "cb8e9c3fa7fb36e05392e8a3cec8c792df4d45924e177310590f1f8ad6f04711",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "03dbd73b1a2be2ea6536ccd366c32025ca8e4d8f1aef2d88927728b414839804",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "e0975f41df8a8b6da3d1b8e22f68a4499f00160577a3b4fe15ae16b1d119dbfc",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "44d51032589fcfb67b0688baef1afca2a5324584abb0d6307d1b44454a09e7de",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "2e6d12b47940c30d077ed1ff7bf0dee26c6bf35fc1bd65e362ff82757cbf599e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "8e7cbd180808c0a7449ad8314a7ea215ad26388edbd005f7bf6f035a07af3e8c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "9e493aa2c1e74ae6530ebfae8f50cfd06dbfab2a5b5d27d881eb08577a24844e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "904ef921568b0fb0f7fd79fce90ef754229c4a81365b00f1459b461c68b97d5c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "55ee8e22ef3ec4242a6fbded3a0c759266a91fbae8442be9c64abf9693266bd1",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params": "25b7105b1bed47b7f8e834e6e410902d39c5bf8a3e13b85d348d6ec8ace867d1",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "537114ca2b5dcc8485f5d4d8db858f5e84e4827d8bbb7cd041e2cd07068c7e30",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "f2db5863e64ab910e9d4283cf59dd30275a64880e028a493e85c4b9c6ae74e9a"
}
28 changes: 14 additions & 14 deletions mpl_animators/tests/figure_hashes_mpl_380_ft_261_astropy_610.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{
"mpl_animators.tests.test_basefuncanimator.test_lineanimator_figure": "6865a446680cb7088d71becd653e3c9e9e8e982d71956c95f690d52365bfe106",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "7cf4b83a10ff179afd40d142860edfac340b922f42647eeae5ae9426627a6c63",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_clip_interval": "f03cf2632d825991cdfa5c5a15542fc53dc3a90d29cb21dabe858365f3f8c4b1",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "14fc82e6778a7725092a691f210f05420e5669099fe8cb21260fd44336e57f8e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "6d328b74049bb415245901d033efdc103b55b11156a94e483da3c54615057c4b",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "eca32f981221be9268155d12c3662891951516ea1166a9a17c239eedb4b28c92",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "1ac74e4adb0fca87e99dee372842302130a90b8c5d2547b4ed9e14a60c9b8e96",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "7dd4f77842219e790df3297773e581382164b00f0dc72c40379f5fca33ed4c36",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "67fb82ca58a293bbcebcc06432a919c1aed54fb671a0be0e9d9289645d7897c0",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "0618fba2b4285904d3594b4b3d76ebd56337cf2ad4c00aa568ac111f6d3e52aa",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "ae635463aaa2da4d494e9e90f040d39adf452eda92ad5f1c988b5be0bf437185",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params": "ba389aca68e8cba9fcaf2e966cc909fba7b7f3e4ba4d65ad3035dae9c8056d57",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "536034d8e761ef5d2fdfbf8911c4ab9bbc96308328594befb44d0837eccd671e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "6dacd902ec7ac3e9b34dac8554ef2a83a5b3a12ad5ddf63858511ac6fe02d417"
"mpl_animators.tests.test_basefuncanimator.test_lineanimator_figure": "b530bbb746b26dc8212ff4bbd71ce5f76995dfc5c03521f0e08c58ba9f692ba2",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "a3f9fadc3d11ea11429a93f927a3d288bf1046ec8fd764d2e947d698d47bd08c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_clip_interval": "cb8e9c3fa7fb36e05392e8a3cec8c792df4d45924e177310590f1f8ad6f04711",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "03dbd73b1a2be2ea6536ccd366c32025ca8e4d8f1aef2d88927728b414839804",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "e0975f41df8a8b6da3d1b8e22f68a4499f00160577a3b4fe15ae16b1d119dbfc",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "44d51032589fcfb67b0688baef1afca2a5324584abb0d6307d1b44454a09e7de",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "2e6d12b47940c30d077ed1ff7bf0dee26c6bf35fc1bd65e362ff82757cbf599e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "8e7cbd180808c0a7449ad8314a7ea215ad26388edbd005f7bf6f035a07af3e8c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "9e493aa2c1e74ae6530ebfae8f50cfd06dbfab2a5b5d27d881eb08577a24844e",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "904ef921568b0fb0f7fd79fce90ef754229c4a81365b00f1459b461c68b97d5c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "55ee8e22ef3ec4242a6fbded3a0c759266a91fbae8442be9c64abf9693266bd1",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params": "1048db37de37090a2edb4fe486e64668260b3b9ff5d9eb7c90010fcc467e0bdb",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "537114ca2b5dcc8485f5d4d8db858f5e84e4827d8bbb7cd041e2cd07068c7e30",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "f2db5863e64ab910e9d4283cf59dd30275a64880e028a493e85c4b9c6ae74e9a"
}
28 changes: 14 additions & 14 deletions mpl_animators/tests/figure_hashes_mpl_dev_ft_2143_astropy_dev.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{
"mpl_animators.tests.test_basefuncanimator.test_lineanimator_figure": "4a20e24a7da5b4eeb3d503fcd4abb91e0c0f0b101993752ad413551febe8d4b6",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "98c2330f3c5d94559ac687b5d4b004bb2217a5b0fd0f1686c3e009d840bc04b7",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_clip_interval": "83236e2d388ee01bdddf99ba4433e7015f155f46cfe1766a3c9d8bd5d3710cc3",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "7f1ca9295320b0cee5a7b50af5e856ba279df19d44f5949deeba0cdd6e06d451",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "c2029f80af5e9d100a2dc834b59accfd850ab7d907bc1d5bce06d0c753d49bc6",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "029ece4b78e2e80df1d3050a389b8b57a1565775052ae864dcd77b7ad2b8f9c8",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "a3fd3a99e4ecc70af07ff55bfd97db72cbf0443af702577bdaa1fd4904cbe577",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "40956fa5497f86944ac9fb9bd5f7774f22ec48ef3b9da6f62de8addd2b0e4dd2",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "0fa964a1c37f5a09cdaecc21cb8615b42fa17f5d2afe675137f5ace566dc5d82",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "b63b9cb7895dfc8402f224f3f45ed51230f6cc42a32f32e2cc1b366773bf4158",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "0df1831b03a8f24a6f1ff44dede8af82ab50700871717670809c3f0707bb73b5",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params": "f5420659988f95e1208216264f44587b5998e568d065421b8fe580fa094fbdd5",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "d31fde4e3ce10097b29c68fb315d56ce22e8ffd5e348c20af1b4063a84b645b8",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "3458d054afba0f2f66745e6d0b746a48c41135022cdaabce300f581a9b080507"
"mpl_animators.tests.test_basefuncanimator.test_lineanimator_figure": "f0d59c55c002f3ebdae6e7fb957c35fbe33af76dee009a39f2ca20df369ad31f",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "1ae9f80195bee6372aef30decd1d4e808a7bb26d1573a17f231550c6b4082950",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_clip_interval": "7506cecc86cbdbdd66a78f64a8a176a00fc4e31b208bab1f009a688284ad1a74",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "bc0c0c0eeaf7e9c9773305d2c298b93def694b879fe26ec5e076e8932f5895da",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "13c7eae1da931ea1471a6ac4ffc38a9461de003c3883e7a01357938ce5bc08f3",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "03d9d5f38a2c57380e59ac496ea4fcb23c3443ae8b276b89e1995955795b0b8c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "cf36c17abfbf4a1b669a98f3bcfc9da7996944130f620d080ea6f0dd76b1257a",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "3ad4825202c005e344886760f12a5357c0ad375fafcd066768f1fb5d8f9bfec1",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "c1609b13cf098a9693ff46be8449309773def2fe701f4974c95890bd07bf4646",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "f5ad6db64b7c52fef93586c4492c25cb7bfafd78e421a93071bea213cd185750",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "55db4f4d9ec539c246423d458c4b0e791978a9d1d273ad40f5ed03e19ff6c04b",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params": "687ba5d9d0a11dc19d771cdb496ff02822c779c9e7ab8c580ad217cf1e09c6fb",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "46ee51fd76a765cd04db44e473db57aa87ab49c822d22c7f1737d1ac46ea276c",
"mpl_animators.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "82cc035601a7a980efd2b43ef180c9da26a9646fd27b774666a095146251d1d1"
}
47 changes: 47 additions & 0 deletions mpl_animators/tests/test_basefuncanimator.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
from mpl_animators.tests.helpers import figure_test


@pytest.fixture(autouse=True)
def close_figures():
yield
plt.close('all')


class FuncAnimatorTest(BaseFuncAnimator):
def plot_start_image(self, ax):
im = ax.imshow(self.data[0])
Expand All @@ -25,6 +31,12 @@ def update_plotval(val, im, slider, data):
im.set_array(data[i])


def _func_animator(slider_range, nframes=3):
data = np.random.random((nframes, 10, 10))
funcs = [partial(update_plotval, data=data)]
return FuncAnimatorTest(data, funcs, [slider_range])


def button_func1(*args, **kwargs):
print(*args, **kwargs)

Expand Down Expand Up @@ -98,6 +110,41 @@ def test_base_func_init(fig, colorbar, buttons):
assert tfa.active_slider == 0


@pytest.mark.parametrize(('slider_range', 'valfmt'), [((0, 3), '%4.0f'), ((0.5, 3.5), '%4.1f')])
def test_slider_valstep_pair(slider_range, valfmt):
tfa = _func_animator(slider_range)
s = tfa.sliders[0]._slider
assert s.valstep == 1
assert s.valfmt == valfmt
assert s.allowed_values is None


@pytest.mark.parametrize('allowed', [np.array([0, 2, 5, 7]), np.array([0, 10])])
def test_slider_valstep_array(allowed):
tfa = _func_animator(allowed)
s = tfa.sliders[0]._slider
assert np.array_equal(s.valstep, allowed)
assert np.array_equal(s.allowed_values, allowed)
assert s.valmin == allowed[0]
assert s.valmax == allowed[-1]


def test_slider_step_previous_array():
allowed = np.array([0, 2, 5, 7])
tfa = _func_animator(allowed, nframes=8)
s = tfa.sliders[0]._slider

s.set_val(0)
for expected in [2, 5, 7, 0]:
tfa._step(s)
assert s.val == expected

s.set_val(7)
for expected in [5, 2, 0, 7]:
tfa._previous(s)
assert s.val == expected


# Make sure figures created directly and through pyplot work
@pytest.fixture(params=[plt.figure, mfigure.Figure])
def funcanimator(request):
Expand Down
Loading