点击时更新Matplotlib图表

6
我正在尝试在用户单击图表时使用新数据点更新matplotlib绘图。我该如何实现这一点?我已经尝试过使用plt.draw()等方法,但没有成功。以下是我迄今为止的尝试。我感觉我在这里缺少了一些基本的东西。
x=[1]
y=[1]

def onclick(event):
    if event.button == 1:
         x.append(event.xdata)
         y.append(event.ydata)

fig,ax=plt.subplots()
ax.scatter(x,y)
fig.canvas.mpl_connect('button_press_event',onclick)
plt.show()
plt.draw()
1个回答

12

你绑定事件的方式没有问题。然而,你仅仅更新了数据集却没有告诉 matplotlib 使用新数据重新绘制图表。为此,在 onclick 方法中我添加了最后4行代码。它们都是不言自明的,但也有注释。

import matplotlib.pyplot as plt
x = [1];
y = [1];

def onclick(event):
    if event.button == 1:
         x.append(event.xdata)
         y.append(event.ydata)
    #clear frame
    plt.clf()
    plt.scatter(x,y); #inform matplotlib of the new data
    plt.draw() #redraw

fig,ax=plt.subplots()
ax.scatter(x,y)
fig.canvas.mpl_connect('button_press_event',onclick)
plt.show()
plt.draw()

注意:在我的电脑上(ubuntu 14.04),matplotlib 改变了比例,因此您可能需要了解如何修复 x-y 的比例。


如果您计划在Jupyter中运行此代码,请记得在顶部添加“%matplotlib notebook”。 - Jurgen Strydom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接