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