我正在尝试检索一个数组作为 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。 我怎样才能找回“积分”? 感谢您的帮助!!
最佳答案
您不能只将变量声明为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()
这将绘制点
一次,然后每次用户点击绘图时,它都会修改line
对象并重新绘制它。
关于python - 来自 matplotlib 事件的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789112/