matplotlib-图形对象没有属性“ plot”。参考问题

时间:2018-10-24 21:46:44

标签: python matplotlib

我知道还有其他人在他们特定的背景下提出这个问题,但是这些答案都没有让我更进一步地弄清楚这个问题。我正在尝试使用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。

预先感谢您的帮助。

1 个答案:

答案 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,因此呼叫将成功,但是,仍然需要将xdataydata传递给您的呼叫。

由于由于画布绘制而将调用figure,因此您也需要将其传递到对象中。