Я пытаюсь написать программу, которая переключается между сигналами нажатием кнопки «предыдущая» и «следующая», и в то же время дает возможность выбрать и сохранить часть графика. Вот что я получил до сих пор:
%matplotlib tk
itera = list(range(1, 100))
fig, ax = plt.subplots()
plt.grid()
plt.subplots_adjust(bottom=0.2)
t = time_axis
s = signal[0] # first signal in the plot
l, = plt.plot(time, s, lw=2) # first plot
plt.xlabel('Time (s)')
plt.ylabel('Acceleration')
plt.title('Plot batches')
############### Buttons widget ####################
class Index(object):
ind = 0
def next(self, event):
self.ind += 1
i = self.ind % len(itera)
ydata = signal[i]
l.set_ydata(ydata)
plt.draw()
def prev(self, event):
self.ind -= 1
i = self.ind % len(itera)
ydata = signal[i]
l.set_ydata(ydata)
plt.draw()
callback = Index()
axprev = plt.axes([0.7, 0.05, 0.1, 0.075])
axnext = plt.axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(axnext, 'Next')
bnext.on_clicked(callback.next)
bprev = Button(axprev, 'Previous')
bprev.on_clicked(callback.prev)
############### Select part of the port ####################
def onselect(xmin, xmax):
x = time_axis
y = signal[callback.ind % len(itera)]
indmin, indmax = np.searchsorted(x, (xmin, xmax))
indmax = min(len(x) - 1, indmax)
thisx = x[indmin:indmax]
thisy = y[indmin:indmax]
# save
np.savetxt("text", np.c_[thisx, thisy])
def fun_with_spanselector_inside():
span = SpanSelector(ax, onselect, 'horizontal', useblit=True,
rectprops=dict(alpha=0.5, facecolor='red') )
return span
span = fun_with_spanselector_inside()
plt.show()
В настоящее время я не знаю, как обновить сигнал y в функции onselect в соответствии с нажатой кнопкой.
Есть предложения?
Спасибо
UPDATE:
Я обновил свой код и подошел к вопросу выше.
Теперь я не знаю, как выбрать несколько частей одного графика и сохранить их в разных файлах. В настоящий момент файл «текст» обновляется каждый раз, и я теряю данные каждый раз, когда выбираю новую область графика.
Может кто-нибудь помочь мне с этим?
Я новичок в python и особенно с matplotlib, так что извините, я прошу что-то простое.
Спасибо