我正在尝试从matplotlib事件中检索数组作为输出:
import numpy as np
import matplotlib.pyplot as plt
def onclick(event):
global points
try:
points = np.append(points,[[event.xdata,event.ydata]],axis=0)
except NameError:
points = np.array([[event.xdata,event.ydata]])
ax.plot(points[:,0],points[:,1],'o')
plt.draw()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim((0,10))
ax.set_ylim((0,10))
plt.gcf().canvas.mpl_connect('button_press_event',onclick)
plt.show()
即使很难,我也宣称“点”是全球性的,
print(points)
返回NameError。 如何检索“积分”? 谢谢你的帮助!!
答案 0 :(得分:3)
您不能将变量声明为global
,您必须先创建它。以下代码应该按预期工作。
import numpy as np
import matplotlib.pyplot as plt
points = []
def onclick(event):
global points
points.append([event.xdata, event.ydata])
ax.plot(event.xdata, event.ydata,'o')
plt.draw()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim((0, 10))
ax.set_ylim((0, 10))
plt.gcf().canvas.mpl_connect('button_press_event', onclick)
plt.show()
下面显示的是我点击5次后的情节。
您可以改为修改已有的绘图对象,而不是每次添加一个点时都绘制一个新标记。如下所示。
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim((0, 10))
ax.set_ylim((0, 10))
points = []
line, = ax.plot(points, 'o--')
def onclick(event):
global points
points.append([event.xdata, event.ydata])
line.set_data(zip(*points))
plt.draw()
plt.gcf().canvas.mpl_connect('button_press_event', onclick)
plt.show()
这将绘制points
一次,然后每当用户点击图表时,它将修改line
对象并重新绘制它。