Как я могу сделать пустой участок в matplotlib?

Я делаю группу подзаговоров (скажем, 3 x 2) в matplotlib, но у меня меньше 6 наборов данных. Как я могу сделать оставшийся подзаговор пустым?

Расположение выглядит так:

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+

Это может продолжаться для нескольких страниц, но на последней странице есть, например, 5 наборов данных, и поле 2,1 будет пустым. Однако я объявил цифру как:

cfig,ax = plt.subplots(3,2)

Итак, в пространстве для подзаголовка 2,1 есть набор осей по умолчанию с отметками и метками. Как я могу программно визуализировать это пространство пустым и без осей?


person mishaF    schedule 05.04.2012    source источник


Ответы (4)


Вы всегда можете спрятать топоры, которые вам не нужны. Например, следующий код полностью отключает 6-ю оси:

import matplotlib.pyplot as plt

hf, ha = plt.subplots(3,2)
ha[-1, -1].axis('off')

plt.show()

и дает следующий рисунок:

Изображение сетки графиков 3x2 без отображения графика в правой нижней ячейке

В качестве альтернативы см. Принятый ответ на вопрос Скрытие текста оси на графиках matplotlib, чтобы узнать, как сохранить оси, но скрыть все украшения топоров (например, отметки и метки).

person Chris    schedule 05.04.2012
comment
Спасибо - это даже ближе к моему первоначальному вопросу. Я уже принял другой ответ и адаптировал свой код для его использования, но оба подхода хороши. - person mishaF; 06.04.2012
comment
Круто, это действительно приятно, потому что здесь меньше add_subplot() беспорядка. - person moooeeeep; 06.04.2012
comment
Это изумительно! - person FaCoffee; 09.06.2017
comment
Здесь нет сюжета, и можно сказать, что это пустой сюжет. Я искал график, на котором нет данных, чтобы явно показать, что данных нет. Любая простая модификация этого ответа, которая делает это? - person Zelphir Kaltstahl; 09.07.2017
comment
@Zelphir Я не уверен, что вам нужно: остальные пять графиков - это пустые графики без данных, поэтому я не уверен, что еще вы просите. Кроме того, это новый вопрос. В будущем, пожалуйста, задавайте это как новый вопрос, а не комментируйте старый ответ. - person Chris; 10.07.2017
comment
@Chris, это последнее пустое место идеально подходит для добавления легенды. Вы знаете, как поставить там легенду? - person Stefano; 19.04.2018
comment
Ответ хорош, но не работает для GeoAxes. Читателям также рекомендуется использовать оси [-1, -1] .set_visible (False) для достижения цели. - person Fei Yao; 24.06.2019

Значительно улучшенный интерфейс подзаголовка был добавлен в matplotlib, поскольку этот вопрос был первый спросил. Здесь вы можете создать именно те сюжеты, которые вам нужны, не скрывая лишних деталей. Кроме того, подзаголовки могут охватывать дополнительные строки или столбцы.

import pylab as plt

ax1 = plt.subplot2grid((3,2),(0, 0))
ax2 = plt.subplot2grid((3,2),(0, 1))
ax3 = plt.subplot2grid((3,2),(1, 0))
ax4 = plt.subplot2grid((3,2),(1, 1))
ax5 = plt.subplot2grid((3,2),(2, 0))

plt.show()

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

person Hooked    schedule 15.01.2013
comment
Вау, это хорошее улучшение. Так намного проще! Спасибо, @Hooked! - person mishaF; 25.01.2013
comment
@Hooked, последнее пустое место идеально подходит для добавления легенды. Вы знаете, как поставить там легенду? - person Stefano; 19.04.2018
comment
@Stefano уверен, что есть способы сделать это, но это лучше всего было бы сформулировать как новый вопрос, вы даже можете связать этот ответ в своем вопросе (кстати, добро пожаловать в StackOverflow!) - person Hooked; 19.04.2018

Также возможно скрыть подзаголовок с помощью метода Axes.set_visible ().

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure()
data = pd.read_csv('sampledata.csv')

for i in range(0,6):
    ax = fig.add_subplot(3,2,i+1)
    ax.plot(range(1,6), data[i])
    if i == 5:
        ax.set_visible(False)
person Nick Hunkins    schedule 10.04.2017
comment
Ваш ответ хорош как для оригинальных Axes, так и для расширенных GeoAxes! - person Fei Yao; 24.06.2019

Можно ли будет создать дополнительные сюжеты, когда они вам понадобятся?

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as plt

plt.figure()
plt.gcf().add_subplot(421)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(422)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(423)
plt.fill([0,0,1,1],[0,1,1,0])
plt.suptitle("Figure Title")
plt.gcf().subplots_adjust(hspace=0.5,wspace=0.5)
plt.savefig("outfig")
person moooeeeep    schedule 05.04.2012
comment
Я так не думаю, потому что мне нужно сделать еще кое-что, что я не включил в исходный вопрос для краткости. Один из них - plt.subplots_adjust (wspace = 0, hspace = 0). Я не уверен, что это сработает постфактум. - person mishaF; 06.04.2012
comment
@mishaF: вы можете использовать subplots_adjust (), используя этот подход. Смотрите мою правку. - person moooeeeep; 06.04.2012