Muy similar a esta pregunta, pero con la diferencia de que mi figura puede ser tan grande como debe ser.
Necesito generar un montón de parcelas apiladas verticalmente en matplotlib. El resultado se guardará usando figsave y se verá en una página web, por lo que no me importa qué tan alta sea la imagen final siempre que las subtramas estén espaciadas para que no se superpongan.
No importa cuán grande permita que sea la figura, las subtramas siempre parecen superponerse.
Mi código actualmente se ve así
import matplotlib.pyplot as plt
import my_other_module
titles, x_lists, y_lists = my_other_module.get_data()
fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
plt.subplot(len(titles), 1, i)
plt.xlabel("Some X label")
plt.ylabel("Some Y label")
plt.title(titles[i])
plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
python
matplotlib
mcstrother
fuente
fuente
tight_layout()
es impredecible. He estado tratando de entender lo que es diferente cuando se tiene ningún efecto (grandes márgenes entre la trama se mantienen) - que a menudo essuptitle
) con mi título de subtrama. En caso de que alguien encuentre un problema similar, esto es lo que ayudó en mi caso stackoverflow.com/a/45161551/11740420 . A saber, elrect
parámetro detight_layout()
Puede usar
plt.subplots_adjust
para cambiar el espacio entre las subtramas (fuente)firma de llamada:
Los significados de los parámetros (y los valores predeterminados sugeridos) son:
Los valores predeterminados reales son controlados por el archivo rc
fuente
Descubrí que subplots_adjust (hspace = 0.001) es lo que terminó funcionando para mí. Cuando uso space = None, todavía hay espacio en blanco entre cada parcela. Sin embargo, establecerlo en algo muy cercano a cero parece obligarlos a alinearse. Lo que he subido aquí no es el código más elegante, pero puedes ver cómo funciona el espacio h.
fuente
El método plt.subplots_adjust :
o
El tamaño de la imagen es importante.
"He intentado jugar con hspace, pero aumentarlo solo parece hacer que todos los gráficos sean más pequeños sin resolver el problema de superposición".
Por lo tanto, para hacer más espacio en blanco y mantener el tamaño de subtrama, la imagen total debe ser más grande.
fuente
plt.figure(figsize=(10, 7))
, el tamaño de la imagen sería2000 x 1400
pixPuedes probar el subplot_tool ()
fuente
Similar a
tight_layout
matplotlib ahora (a partir de la versión 2.2) proporcionaconstrained_layout
. En contraste contight_layout
, que se puede llamar en cualquier momento en el código para un diseño optimizado único,constrained_layout
es una propiedad, que puede estar activa y optimizará el diseño antes de cada paso de dibujo.Por lo tanto, debe activarse antes o durante la creación de la subtrama, como
figure(constrained_layout=True)
osubplots(constrained_layout=True)
.Ejemplo:
restricined_layout también se puede establecer a través de
rcParams
Vea la entrada de novedades y la Guía de diseño restringido
fuente
tight_layout
no es confiabletight_layout()
funcionó mejorcontrained_layout
es más lento, porque como se ve en esta respuesta, optimiza el diseño antes de cada paso de dibujo .