Я учусь использовать matplotlib
, изучая примеры, и многие примеры, кажется, включают в себя строку, подобную следующей, перед созданием одного сюжета ...
fig, ax = plt.subplots()
Вот несколько примеров...
Я вижу, что эта функция часто используется, хотя в примере делается попытка создать только один график. Есть ли какое-то другое преимущество? Официальная демоверсия для subplots()
также используется f, ax = subplots
при создании одного графика, и после этого она ссылается только на топор. Это код, который они используют.
# Just a figure and one subplot
f, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')
python
matplotlib
plot
visualization
neelshiv
источник
источник
Ответы:
plt.subplots()
является функцией, которая возвращает кортеж, содержащий фигуру и объект (ы) осей. Таким образом, при использованииfig, ax = plt.subplots()
вы распаковываете этот кортеж в переменныеfig
иax
. Наличиеfig
полезно, если вы хотите изменить атрибуты уровня фигуры или сохранить фигуру в виде файла изображения позже (например, с помощьюfig.savefig('yourfilename.png')
). Вы, конечно, не должны использовать возвращенный объект figure, но многие люди используют его позже, так что это часто можно увидеть. Кроме того, все объекты осей (объекты, у которых есть методы построения графика), в любом случае имеют родительский объект figure, таким образом:более кратким, чем это:
источник
ax11, ax12, ax21, ax22
использоватьfig.add_subplot(221)
(или 222, 223, 224 соответственно).Просто дополнение здесь.
Следующий вопрос заключается в том, что, если я хочу больше участков на рисунке?
Как уже упоминалось в документе, мы можем использовать
fig = plt.subplots(nrows=2, ncols=2)
чтобы установить группу участков с сеткой (2,2) в одном объекте фигуры.Тогда, как мы знаем,
fig, ax = plt.subplots()
возвращает кортеж, давайтеfig, ax1, ax2, ax3, ax4 = plt.subplots(nrows=2, ncols=2)
сначала попробуем .Это вызывает ошибку, но не беспокойтесь, потому что теперь мы видим, что
plt.subplots()
самом деле возвращает кортеж с двумя элементами. Первый должен быть объектом рисунка, а другой должен быть группой объектов вспомогательных участков.Итак, давайте попробуем это снова:
и проверьте тип:
Конечно, если вы используете параметры как (nrows = 1, ncols = 4), то формат должен быть:
Так что просто помните, что построение списка должно быть таким же, как и для сетки подзаговоров, которую мы установили на рисунке.
Надеюсь, это будет полезно для вас.
источник
fig, axes = plt.subplots(nrows=10, ncols=3)
иaxes = axes.flatten()
. Теперь вы можете обратиться к каждому подзаговоре по его индексу:axes[0]
,axes[1]
, ...nrows=1
, как тогдаaxes
, возвращается плоский с длиной, равнойncols
fig, axes = plt.subplots(nrows=1, ncols=3, squeeze=False)
В качестве дополнения к вопросу и ответам выше, есть также важное различие между
plt.subplots()
иplt.subplot()
, обратите внимание на отсутствие's'
в конце.Можно использовать,
plt.subplots()
чтобы сделать все их вспомогательные участки одновременно, и он возвращает фигуру и оси (во множественном числе от оси) вспомогательных участков в виде кортежа. Фигуру можно понимать как холст, на котором вы рисуете свой эскиз.Принимая во внимание, что вы можете использовать,
plt.subplot()
если вы хотите добавить отдельные участки отдельно. Возвращает только ось одного субплота.Тем не менее,
plt.subplots()
это предпочтительнее, потому что это дает вам более легкие возможности напрямую настроить всю фигурутогда как, с
plt.subplot()
, нужно будет указать индивидуально для каждой оси, которая может стать громоздкой.источник
ax3 = plt.subplot(2,1,3)
не будет работать, потому что это 2 на 1, которая имеет только 2 графика.В дополнение к ответам выше, вы можете проверить тип объекта, используя
type(plt.subplots())
который возвращает кортеж, с другой стороны,type(plt.subplot())
возвращает,matplotlib.axes._subplots.AxesSubplot
который вы не можете распаковать.источник