120 votes

Comment créer un sous-graphe vide dans matplotlib ?

Je crée un groupe de sous-graphes (disons, 3 x 2) dans matplotlib, mais j'ai moins de 6 ensembles de données. Comment puis-je faire en sorte que les sous-graphes restants soient vides ?

L'arrangement se présente comme suit :

+----+----+
| 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 ensembles de données et la case 2,1 sera vide. Cependant, j'ai déclaré la figure comme :

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

Ainsi, dans l'espace du sous-graphe 2,1, il y a un ensemble d'axes par défaut avec des tics et des étiquettes. Comment puis-je, par programme, rendre cet espace vide et dépourvu d'axes ?

209voto

Chris Points 12438

Vous pouvez toujours cacher les axes dont vous n'avez pas besoin. Par exemple, le code suivant désactive complètement le 6e axe :

import matplotlib.pyplot as plt

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

plt.show()

et le résultat est la figure suivante :

An image of a 3x2 grid of graphs, with no graph rendered in the bottom right cell

Alternativement, voir la réponse acceptée à la question Cacher le texte des axes dans les tracés matplotlib pour conserver les axes mais masquer toutes les décorations des axes (par exemple, les marques de coche et les étiquettes).

29voto

Hooked Points 16345

A beaucoup améliorée interface de sous-plot a été ajouté à matplotlib depuis que cette question a été posée. Ici, vous pouvez créer exactement les sous-graphes dont vous avez besoin sans cacher les extras. En outre, les sous-graphes 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

15voto

Nick Hunkins Points 81

Il est également possible de masquer un sous-graphe à 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)

2voto

moooeeeep Points 10167

Serait-il possible de créer les intrigues secondaires quand on en a 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")

1voto

user467491 Points 1

Pour supprimer le graphe positionné à (2,1), vous pouvez utiliser

import matplotlib.pyplot as plt
cfig,ax = plt.subplots(3,2)
cfig.delaxes(ax.flatten()[5])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X