Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib-地物对象没有属性';绘图';。参考问题_Python_Matplotlib - Fatal编程技术网

Python matplotlib-地物对象没有属性';绘图';。参考问题

Python matplotlib-地物对象没有属性';绘图';。参考问题,python,matplotlib,Python,Matplotlib,我知道还有其他人在他们特定的环境中问这个问题,但这些答案都没有让我更接近于弄明白这一点。我正在尝试使用matplotlib中的一个类向地物添加绘图 我试图让类将Line2D对象作为参数,并对其进行一些解释—这很有效。该类还注册了对绘图窗口上鼠标单击事件的回调-这也起作用。以下是不起作用的: fig, ax = plt.subplots() series, = ax.plot(x_data, y_data) classthing = MyClass(series) plt.show() 下面是正

我知道还有其他人在他们特定的环境中问这个问题,但这些答案都没有让我更接近于弄明白这一点。我正在尝试使用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()
在鼠标单击时,我想向单击的图形添加一个绘图。这与这里的示例非常相似:

这段代码成功地创建了plot和对象,但显然我没有从正确的引用调用plot()方法,因为我在倒数第二行得到了title错误。如果仅指定打印对象中的Line2D对象,如何正确引用该打印对象?我不能胜任OOP


提前感谢您的帮助。

您不能同时绘制
ax
并再次使用它。代码中的
系列
是一个
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
传递给
,因此您的呼叫将成功,但仍然需要将
xdata
ydata
传递给您的呼叫


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

您不在图形上绘图。你在图形中的轴上绘图。谢谢你的回答-我只需将ax传递到类中就可以让它工作。关于面向事件的Python是如何工作的,我没有了解很多。这个类的目的是在继续执行之前从用户那里收集一些输入数据,但是现在,即使在类等待输入时,脚本也会立即完成。我需要找出如何强制脚本等待回调完成x次,但我认为这是另一个问题。尝试
async
——但这将是一个更大的主题