Як я можу зробити порожній підпрограм в matplotlib?


88

Я створюю групу підпрограми (скажімо, 3 х 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 є стандартний набір осей із галочками та мітками. Як я можу програмно зробити цей простір порожнім і позбавленим осей?

Відповіді:


146

Ви завжди можете заховати непотрібні вам сокири. Наприклад, наступний код повністю вимикає 6-ті осі:

import matplotlib.pyplot as plt

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

plt.show()

і виходить на наступному малюнку:

Зображення сітки графіків розміром 3x2 без графіку, відтвореного в нижній правій комірці

Крім того, див. Прийняту відповідь на запитання Приховування тексту осі в графіках matplotlib щодо способу збереження осей, але приховування всіх прикрас осей (наприклад, галочки та мітки).


Дякую - це насправді ще ближче до мого початкового питання. Я вже прийняв іншу відповідь і пристосував свій код для її використання, але обидва підходи чудові.
mishaF

Класно, це справді приємно, оскільки там менше add_subplot()безладу.
moooeeeep

Це чудово!
FaCoffee

Це не показує жодного сюжету, і можна сказати, що це пустий сюжет. Я шукав сюжет, який не має даних, щоб явно показати, що даних немає. Будь-яка проста модифікація цієї відповіді, що це робить?
Zelphir Kaltstahl

@Zelphir Я не впевнений, що ти хочеш: інші п’ять графіків - це порожні графіки без даних, тому я не впевнений, про що ти додатково просиш. Крім того, це нове питання. У майбутньому, будь ласка, задавайте це як нове питання, а не коментуючи стару відповідь.
Кріс

26

З того часу, як це запитання було вперше задано, до 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()

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


Ого - це приємне покращення. Так простіше! Дякую @Hooked!
mishaF

@Hooked, це останнє порожнє місце ідеально підходить для додавання легенди. Чи знаєте ви якийсь спосіб встановити там легенду?
Стефано

@Stefano впевнений , що є способи зробити це , - але це було б найкраще ставиться як нове питання, ви навіть можете пов'язати цей відповідь ваше запитання (ласкаво просимо в StackOverflow до речі!)
Захоплені

7

Також можна приховати додатковий сюжет за допомогою методу 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)

Ваша відповідь чудова як для оригінальних осей, так і для розширених геоосей!
Фей Яо

1

Чи можна було б створити підзаговори, коли вони вам потрібні?

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")

Я не думаю, що тому, що мені потрібно виконати інші дії з форматування, які я не включив у початкове запитання для стислості. Одним з них є plt.subplots_adjust (wspace = 0, hspace = 0). Я не впевнений, що це спрацювало б по суті.
mishaF

@mishaF: ви можете зробити subplots_adjust (), використовуючи цей підхід. Перегляньте мою редакцію.
moooeeeep
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.