matplotlib - Объект рисунка не имеет атрибута plot.Справочные проблемы - PullRequest
0 голосов
/ 25 октября 2018

Я знаю, что есть другие люди, задающие этот вопрос в их конкретном контексте, но ни один из этих ответов не приблизил меня к выяснению этого.Я пытаюсь использовать класс в 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?Я не очень компетентен с ООП.

Заранее благодарим за помощь.

1 Ответ

0 голосов
/ 25 октября 2018

Вы не можете одновременно построить 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 из-за отрисовки холста, вам нужно будет передать это и вашему объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...