2016-11-05 58 views
0

我试图在用户单击图时用新数据点更新matplotlib图。我怎样才能做到这一点?我试过用plt.draw()这样的东西没有任何成功。这是我迄今的尝试。我觉得我在这里错过了一些基本的东西。单击时更新Matplotlib图

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

回答

3

您绑定事件的方式没有任何问题。但是,您只更新了数据集,并未告知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() 

注:matplotlib在我的电脑(Ubuntu的14.04)改变的规模,所以你可能要考虑如何解决与X-Y规模。