我知道还有其他人在他们特定的背景下提出这个问题,但是这些答案都没有让我更进一步地弄清楚这个问题。我正在尝试使用matplotlib中的类将图添加到图中。
我正在尝试让该类将Line2D对象作为参数并对其进行一些解释-这是可行的。该类还会在绘图窗口上注册一个鼠标单击事件的回调,这也起作用。这是行不通的:
fig, ax = plt.subplots()
series, = ax.plot(x_data, y_data)
classthing = MyClass(series)
plt.show()
这是正在实例化的类:
class MyClass:
def __init__(self, series):
self.series = series
self.cid = series.figure.canvas.mpl_connect('button_press_event', self)
def __call__(self, event):
self.series.figure.plot([xdata], [ydata])
self.series.figure.canvas.draw()
在鼠标单击上,我想向单击的图形添加图形。这确实类似于此处的示例:https://matplotlib.org/users/event_handling.html
此代码成功创建了图和对象,但是显然我没有从正确的引用中调用plot()方法,因为在倒数第二行出现标题错误。仅给定其中的Line2D对象,如何正确引用该图对象?我远不能胜任OOP。
预先感谢您的帮助。
答案 0 :(得分:1)
不能同时绘制ax
并再次使用它。您代码中的series
是一个Line2D
对象,它没有属性plot
。
您可以做的是像这样向您的班级添加一个ax
对象:
class MyClass:
def __init__(self, series, fig):
self.series = series
self.figure = fig
self.cid = self.figure.canvas.mpl_connect('button_press_event', self)
def __call__(self, event):
self.series.plot([xdata], [ydata])
self.figure.canvas.draw()
fig, ax = plt.subplots()
series = ax
classthing = MyClass(series)
classthing(some_event) # call your class
现在,由于您将ax
传递到class
,因此呼叫将成功,但是,仍然需要将xdata
和ydata
传递给您的呼叫。
由于由于画布绘制而将调用figure
,因此您也需要将其传递到对象中。