Python 在matplotlib图中前后滚动

Python 在matplotlib图中前后滚动,python,matplotlib,Python,Matplotlib,我的代码使用matplotib从数据中生成许多绘图,我希望能够在实时演示中前后滚动这些绘图(可能通过按向前和向后键或使用鼠标)。目前,我必须将每一个单独保存为图像,然后使用单独的图像查看器滚动浏览它们。有没有办法完全从python内部实现这一点?一种简单的方法是在列表中存储x和y数组的元组,然后使用处理程序事件选择下一个(x,y)对进行绘制: import numpy as np import matplotlib.pyplot as plt # define your x and y arr

我的代码使用matplotib从数据中生成许多绘图,我希望能够在实时演示中前后滚动这些绘图(可能通过按向前和向后键或使用鼠标)。目前,我必须将每一个单独保存为图像,然后使用单独的图像查看器滚动浏览它们。有没有办法完全从python内部实现这一点?

一种简单的方法是在列表中存储x和y数组的元组,然后使用处理程序事件选择下一个(x,y)对进行绘制:

import numpy as np
import matplotlib.pyplot as plt

# define your x and y arrays to be plotted
t = np.linspace(start=0, stop=2*np.pi, num=100)
y1 = np.cos(t)
y2 = np.sin(t)
y3 = np.tan(t)
plots = [(t,y1), (t,y2), (t,y3)]

# now the real code :) 
curr_pos = 0

def key_event(e):
    global curr_pos

    if e.key == "right":
        curr_pos = curr_pos + 1
    elif e.key == "left":
        curr_pos = curr_pos - 1
    else:
        return
    curr_pos = curr_pos % len(plots)

    ax.cla()
    ax.plot(plots[curr_pos][0], plots[curr_pos][1])
    fig.canvas.draw()

fig = plt.figure()
fig.canvas.mpl_connect('key_press_event', key_event)
ax = fig.add_subplot(111)
ax.plot(t,y1)
plt.show()

在这段代码中,我选择了
箭头进行迭代,但您可以更改它们。

生成绘图所需的时间是否太长,您无法做到这一点?例如,
按下按钮->生成绘图->显示它
等等。@AleksanderLidtke我可以实时生成它们,但如何在我创建的绘图中前后滚动?回调。看见就目前而言,这个问题太广泛了。非常感谢贾巴尔德内多——你的例子现在在我的项目中,所以我可以为其他人确认它是有效的。在我的例子中,
key\u event
是装饰器内闭包中的闭包。我不知道原因是什么——所以请帮助我,上一行末尾的标点符号不是错误的——但我一直得到“全局名称
curr\u pos
未定义”,尽管它由
curr\u pos=0
明确定义。我选择了一种形式为
的解决方案,如果不是hasattr(key\u event,“curr\u pos”):key\u event.curr\u pos=0
代替
全局curr\u pos
。如果需要的话,我会使用
key\u event.\uu dict\uu={}
重置。谢谢,这对我来说非常有效!我试图注释掉fig.canvas.draw(),但它仍然有效。也许不需要它?我不明白这个示例中的名称空间是如何工作的。我理解为什么
curr\u pos
需要是一个全局变量,但是为什么
key\u event
可以访问
绘图
列表和
ax
轴实例?