2012-04-05 18 views
44

Estoy haciendo un grupo de subtramas (por ejemplo, 3 x 2) en matplotlib, pero tengo menos de 6 conjuntos de datos. ¿Cómo puedo hacer que la subtrama restante quede en blanco?¿Cómo puedo hacer una subtrama en blanco en matplotlib?

La disposición tiene el siguiente aspecto:

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

Esto puede continuar durante varias páginas, pero en la última página, hay, por ejemplo, 5 conjuntos de datos a la caja de 2,1 estará vacía. Sin embargo, he declarado la figura como:

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

Así que en el espacio para la subtrama 2,1 hay un conjunto predeterminado de ejes con las garrapatas y las etiquetas. ¿Cómo puedo convertir programáticamente ese espacio en blanco y desprovisto de ejes?

Respuesta

73

Siempre puede ocultar los ejes que no necesita. Por ejemplo, el código siguiente gira de los ejes 6-ésima completamente:

import matplotlib.pyplot as plt 

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

plt.show() 

y los resultados en la siguiente figura:

enter image description here

Alternativamente, ver la respuesta aceptada a la pregunta Hiding axis text in matplotlib plots para una forma de mantener los ejes pero ocultando todas las decoraciones de los ejes (p. ej., las marcas y las etiquetas).

+0

Gracias - eso es aún más cercano a mi pregunta original. Ya acepté la otra respuesta y adapté mi código para usarlo, pero ambos enfoques son geniales. – mishaF

+0

Genial, eso es realmente bueno ya que hay menos desorden de 'add_subplot()'. – moooeeeep

+1

pensándolo mejor, mejor ajuste, que cambié .... – mishaF

1

¿Sería una opción crear las subtramas cuando las necesitara?

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

No lo creo porque hay otras cuestiones de formato que tengo que hacer que no incluí en la pregunta original para abreviar. Uno de estos es plt.subplots_adjust (wspace = 0, hspace = 0). No estoy seguro de que eso funcione después del hecho. – mishaF

+0

@mishaF: puedes hacer subplots_adjust() usando este enfoque. Ver mi edición – moooeeeep

+0

, ¡eso funciona bien! Gracias toneladas !! – mishaF

13

A mucho mejorado subplot interface ha sido añadido a matplotlib desde que se hizo esta pregunta por primera vez. Aquí puede crear exactamente las subtramas que necesita sin ocultar los extras. Además, las subtramas pueden abarcar filas o columnas adicionales.

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

+0

Guau, esa es una buena mejora. ¡Mucho más simple! Gracias @Hooked! – mishaF

0

También es posible ocultar una trama secundaria utilizando el método 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) 
Cuestiones relacionadas