Почему многие примеры используют " fig, ax = plt.subplots () " в Matplotlib / pyplot / python


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

fig, ax = plt.subplots()

вот несколько примеров...

Я вижу, что эта функция используется много, хотя пример только пытается создать одну диаграмму. Есть есть еще какое-то преимущество? Официальная демонстрация для subplots() использует f, ax = subplots при создании одной диаграммы, и он только когда-либо ссылается на ax после этого. Это код, который они используют.

# Just a figure and one subplot
f, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')
2 152

2 ответа:

plt.subplots() - это функция, которая возвращает кортеж, содержащий фигуру и объекты осей. Таким образом, при использовании fig, ax = plt.subplots() вы распаковываете этот кортеж в переменные fig и ax. Имея fig полезно, если вы хотите изменить атрибуты уровня фигуры или сохранить фигуру в виде файла изображения позже (например, с fig.savefig('yourfilename.png'). Вам, конечно, не нужно использовать возвращенный объект figure, но многие люди используют его позже, поэтому его часто можно увидеть. Кроме того, все объекты осей (объекты, имеющие методы построения), есть родительский объект фигуры в любом случае, таким образом:

fig, ax = plt.subplots()

более лаконично, чем это:

fig = plt.figure()
ax = fig.add_subplot(111)

просто дополнение здесь.

следующий вопрос: Что делать, если я хочу больше подзаголовков на рисунке?

как уже упоминалось в документе, мы можем использовать fig = plt.subplots(nrows=2, ncols=2) чтобы установить группу подзаголовков с сеткой (2,2) в одном объекте рисунка.

тогда как мы знаем,fig, ax = plt.subplots() возвращает кортеж, давайте попробуем fig, ax1, ax2, ax3, ax4 = plt.subplots(nrows=2, ncols=2) во-первых.

ValueError: not enough values to unpack (expected 4, got 2)

возникает ошибка, но не волнуйтесь, потому что теперь мы видим, что plt.subplots() фактически возвращает кортеж с двумя элементами. 1-й должен быть объектом фигуры, а другой должен быть группой объектов подзаголовков.

Итак, давайте попробуем еще раз:

fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(nrows=2, ncols=2)

и проверьте тип:

type(fig) #<class 'matplotlib.figure.Figure'>
type(ax1) #<class 'matplotlib.axes._subplots.AxesSubplot'>

конечно, если вы используете параметры (параметр nrows=1, ncols=4), то формат должен быть:

fig, [ax1, ax2, ax3, ax4] = plt.subplots(nrows=1, ncols=4)

поэтому просто не забудьте сохранить построение списка таким же, как и сетка подзаголовков, которую мы установили на рисунке.

надеюсь, что это будет полезно для вас.