Почему многие примеры используют " fig, ax = plt.subplots () " в Matplotlib / pyplot / python
Я учусь использовать matplotlib
изучая примеры, и многие примеры, похоже, включают в себя линию, подобную следующей, прежде чем создавать один сюжет...
fig, ax = plt.subplots()
вот несколько примеров...
- изменить текст метки тика
- http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html
Я вижу, что эта функция используется много, хотя пример только пытается создать одну диаграмму. Есть есть еще какое-то преимущество? Официальная демонстрация для 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 ответа:
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)
поэтому просто не забудьте сохранить построение списка таким же, как и сетка подзаголовков, которую мы установили на рисунке.
надеюсь, что это будет полезно для вас.