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, elrectparámetro detight_layout()Puede usar
plt.subplots_adjustpara 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 1400pixPuedes probar el subplot_tool ()
fuente
Similar a
tight_layoutmatplotlib 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_layoutes 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
rcParamsVea la entrada de novedades y la Guía de diseño restringido
fuente
tight_layoutno es confiabletight_layout()funcionó mejorcontrained_layoutes más lento, porque como se ve en esta respuesta, optimiza el diseño antes de cada paso de dibujo .