El siguiente código produce espacios entre las subtramas. ¿Cómo elimino los espacios entre las subtramas y hago que la imagen sea una cuadrícula ajustada?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
python
matplotlib
usuario3006135
fuente
fuente
None
no está haciendo lo que piensa, significa 'usar el predeterminado'.plt.subplots_adjust(wspace=0, hspace=0)
resolvería su problema, si no fuera por el hecho de que utiliza el'equal'
aspecto. Vea mi respuesta para más detalles.Respuestas:
Puede usar gridspec para controlar el espaciado entre ejes. Hay más información aquí.
fuente
GridSpec
, si agarra la figura en la creación, también puede establecer las distancias con:fig.subplots_adjust(hspace=, wspace=)
for
ciclo?subplots
. Esta respuesta hace el trabajo sin sacrificarsesubplots
.El problema es el uso de
aspect='equal'
, que evita que las subtramas se extiendan a una relación de aspecto arbitraria y llenen todo el espacio vacío.Normalmente, esto funcionaría:
El resultado es este:
Sin embargo, con
aspect='equal'
, como en el siguiente código:Esto es lo que obtenemos:
La diferencia en este segundo caso es que ha forzado a los ejes xey a tener el mismo número de unidades / píxel. Dado que los ejes van de 0 a 1 por defecto (es decir, antes de graficar nada), el uso
aspect='equal'
obliga a que cada eje sea un cuadrado. Dado que la figura no es un cuadrado, pyplot agrega un espacio adicional entre los ejes horizontalmente.Para solucionar este problema, puede configurar su figura para que tenga la relación de aspecto correcta. Vamos a utilizar la interfaz pyplot orientada a objetos aquí, que considero superior en general:
Aquí está el resultado:
fuente
plt.subplots_adjust(wspace=0, hspace=0)
Sin recurrir a gridspec por completo, lo siguiente también podría usarse para eliminar los espacios al establecer wspace y hspace en cero:
Resultando en:
fuente
¿Usted ha intentado
plt.tight_layout()
?con
plt.tight_layout()
sin él:O: algo como esto (usar
add_axes
)Si no necesita compartir ejes, simplemente
axLS=map(fig.add_axes, rectLS)
fuente
Con las versiones recientes de matplotlib, es posible que desee probar el diseño restringido . Sin
plt.subplot()
embargo, esto no funciona , por lo que debe usarplt.subplots()
en su lugar:fuente