Pyplot утверждает, что тип рисунка не имеет атрибута » add_subplot ()», но ТОЛЬКО в том случае, если код не относится к классу

#python #matplotlib #subplot #figure

Вопрос:

Следующий код создает холст с двумя пустыми участками на нем, что именно то, что он должен делать.

 import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec


class MakerOfTwoEmptyPlots(object):

    def __init__(self):

        self.fig = plt.figure()
        self.gs = GridSpec(1, 2, figure=self.fig)

        self.fig.add_subplot(self.gs[0, 0])
        self.fig.add_subplot(self.gs[0, 1])


plotter = MakerOfTwoEmptyPlots()
plt.show()
 

Однако, если я выполню точно такой же код за пределами класса, например так:

 import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

fig = plt.figure()
gs = GridSpec(1, 2, figure=fig)

fig.add_sublot(gs[0, 0])
fig.add_sublot(gs[0, 1])

plt.show()
 

Я получаю ошибку AttributeError: 'Figure' object has no attribute 'add_sublot' , несмотря на то, что код по сути идентичен и self.fig имеет один и fig тот же тип (я проверил в отладчике). Это глубоко сбивает с толку! Кто — нибудь знает, что здесь происходит?

Поскольку это похоже на проблему, которая может зависеть от этого, я использую Python 3.9.1, MatPlotLib 3.3.3 и IntelliJ IDEA Community Edition 2020.3.

Правка: Как указывали несколько человек, это была простая опечатка. ой. Спасибо, что увидел то, чего не смог увидеть я.

Комментарии:

1. Figure объекты действительно не имеют add_sublot атрибутов. Вместо этого они есть add_subplot , как вы использовали в первом блоке кода. Видите разницу?

2. Это опечатка. fig.sublot(gs[0,0]) п. отсутствует.

Ответ №1:

Этого fig.subplot не должно быть fig.sublot :

 import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

fig = plt.figure()
gs = GridSpec(1, 2, figure=fig)

fig.add_subplot(gs[0, 0])
fig.add_subplot(gs[0, 1])

plt.show()
 

введите описание изображения здесь