web-dev-qa-db-fra.com

Comment puis-je créer un sous-tracé vierge dans matplotlib?

Je fais un groupe de sous-intrigues (disons, 3 x 2) dans matplotlib, mais j'ai moins de 6 ensembles de données. Comment rendre le sous-tracé restant vide?

L'arrangement ressemble à ceci:

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

Cela peut durer plusieurs pages, mais sur la dernière page, il y a, par exemple, 5 jeux de données dans la zone 2,1 qui sera vide. Cependant, j'ai déclaré le chiffre comme suit:

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

Ainsi, dans l'espace de la sous-intrigue 2,1, il y a un ensemble d'axes par défaut avec des graduations et des étiquettes. Comment puis-je rendre cet espace vide par programme et sans axes?

65
mishaF

Vous pouvez toujours masquer les axes dont vous n'avez pas besoin. Par exemple, le code suivant transforme complètement les 6e axes:

import matplotlib.pyplot as plt

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

plt.show()

et donne la figure suivante:

enter image description here

Alternativement, voir la réponse acceptée à la question Masquer le texte de l'axe dans les tracés matplotlib pour un moyen de conserver les axes mais de masquer toutes les décorations des axes (par exemple, les graduations et les étiquettes).

104
Chris

Un beaucoup amélioré interface de sous-intrigue a été ajouté à matplotlib depuis la première question posée. Ici, vous pouvez créer exactement les sous-tracés dont vous avez besoin sans masquer les extras. De plus, les sous-tracés peuvent s'étendre sur des lignes ou des colonnes supplémentaires.

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

enter image description here

25
Hooked

Il est également possible de masquer un sous-tracé à l'aide de la méthode 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)
4
Nick Hunkins

Serait-ce une option pour créer les sous-parcelles quand vous en avez besoin?

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