I'm using a Slider widget to horizontally scroll through the heatmap of a 4-by-10000 matrix. Each window in my slider shows 100 columns of the matrix. Each sample corresponds to a time in seconds, which is the sample number divided by the sampling frequency, fs=200. Thus, sample number 10000 corresponds to 50 seconds.
I can relabel the horizontal axis tickmarks of my scrolling plot to be in seconds, but I wish to do the same for the shown slider value. Here's what I have:
I want the value on the slider to be labelled in seconds, not by sample number.
I can relabel the horizontal axis tickmarks of my scrolling plot to be in seconds, but I wish to do the same for the shown slider value. Here's what I have:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider num_samples = 10000 M = np.random.rand( 4 ,num_samples) scroll_win_size = 100 fs = 200 #sampling frequency, measured in samples per second. fig, ax = plt.subplots() plt.subplots_adjust(bottom = 0.25 ) plt.imshow(M,aspect = 'auto' ,cmap = 'jet' ) plt.colorbar() axpos = plt.axes([ 0.2 , 0.1 , 0.65 , 0.03 ], facecolor = 'lightgoldenrodyellow' ) spos = Slider(axpos, 'time' , 0 , num_samples - scroll_win_size,valinit = 0 ,valstep = 10 ) def update(val): pos = spos.val if val < num_samples - scroll_win_size: ax.axis([pos,pos + scroll_win_size, 0 , 3 ]) ax.xaxis.set_major_locator(plt.MaxNLocator( 5 )) #Specify 5 tickmarks at a time. xticks = ax.get_xticks() * 1 / fs #Scale tickmarks to be labelled in seconds. ax.set_xticklabels(np.around(xticks, 1 )) fig.canvas.draw_idle() spos.on_changed(update) plt.show() |
![[Image: iiwvu.png]](https://i.stack.imgur.com/iiwvu.png)