Python Matplotlib按钮小部件和SpanSelector事件

时间:2018-11-07 12:59:57

标签: python matplotlib events callback

我正在尝试编写一个程序,通过单击“上一个”和“下一个”按钮在信号之间切换,同时可以选择并保存部分曲线。这是我到目前为止所得到的:

%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()

目前,我不知道如何在onselect函数中根据已按下的按钮更新y信号。

有什么建议吗?

谢谢

  

更新:

我已经更新了代码并解决了上面的问题。 现在,我不知道如何选择同一图的多个部分并将它们保存到不同的文件中。目前,文件“文本”每次都会更新,每次选择绘图的新区域时都会丢失数据。

有人可以帮我吗?

我是python的新手,尤其是matplotlib的用户,对不起,我问的是一些基本知识。

谢谢

0 个答案:

没有答案