python - matrices - Mejore el tamaño/espaciado de las subparcelas con muchas subparcelas en matplotlib
que es matplotlib (6)
Descubrí que subplots_adjust (hspace = 0.001) es lo que terminó funcionando para mí. Cuando uso el espacio = Ninguno, todavía hay espacio en blanco entre cada gráfico. Ponerlo en algo muy cercano a cero, sin embargo, parece forzarlos a alinearse. Lo que he cargado aquí no es el código más elegante, pero puedes ver cómo funciona el hspace.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tic
fig = plt.figure()
x = np.arange(100)
y = 3.*np.sin(x*2.*np.pi/100.)
for i in range(5):
temp = 510 + i
ax = plt.subplot(temp)
plt.plot(x,y)
plt.subplots_adjust(hspace = .001)
temp = tic.MaxNLocator(3)
ax.yaxis.set_major_locator(temp)
ax.set_xticklabels(())
ax.title.set_visible(False)
plt.show()
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á utilizando Figsave y se verá en una página web, por lo que no me importa cuán alta sea la imagen final, siempre que las subparcelas estén espaciadas para que no se superpongan.
No importa qué tan grande permita que sea la figura, las subparcelas siempre parecen superponerse.
Mi código actualmente parece
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)
Podrías probar el subplot_tool ()
plt.subplot_tool()
Puede usar plt.subplots_adjust
para cambiar el espaciado entre las subplots (source)
firma de llamada:
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
Los significados de los parámetros (y los valores predeterminados sugeridos) son:
left = 0.125 # the left side of the subplots of the figure
right = 0.9 # the right side of the subplots of the figure
bottom = 0.1 # the bottom of the subplots of the figure
top = 0.9 # the top of the subplots of the figure
wspace = 0.2 # the amount of width reserved for blank space between subplots
hspace = 0.2 # the amount of height reserved for white space between subplots
Los valores predeterminados reales son controlados por el archivo rc
Similar a tight_layout
matplotlib ahora (a partir de la versión 2.2) proporciona contrained_layout
. A diferencia de tight_layout
, que puede llamarse en cualquier momento en el código para un solo diseño optimizado, constrained_layout
es una propiedad que puede estar activa y optimizará el diseño antes de cada paso del dibujo.
Por lo tanto, debe activarse antes o durante la creación de la trama secundaria. Esto puede suceder como un argumento a la figure(contrained_layout=True)
o subplots(constrained_layout=True)
.
Ejemplo:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(4,4, constrained_layout=True)
plt.show()
rcParams
también se puede establecer a través de rcParams
plt.rcParams[''figure.constrained_layout.use''] = True
Vea la entrada de novedades y la contrained_layout
Trate de usar plt.tight_layout
Como un ejemplo rápido:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=4, ncols=4)
fig.tight_layout() # Or equivalently, "plt.tight_layout()"
plt.show()
Sin diseño apretado
Con diseño apretado
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,60))
plt.subplots_adjust( ... )
El método plt.subplots_adjust :
def subplots_adjust(*args, **kwargs):
"""
call signature::
subplots_adjust(left=None, bottom=None, right=None, top=None,
wspace=None, hspace=None)
Tune the subplot layout via the
:class:`matplotlib.figure.SubplotParams` mechanism. The parameter
meanings (and suggested defaults) are::
left = 0.125 # the left side of the subplots of the figure
right = 0.9 # the right side of the subplots of the figure
bottom = 0.1 # the bottom of the subplots of the figure
top = 0.9 # the top of the subplots of the figure
wspace = 0.2 # the amount of width reserved for blank space between subplots
hspace = 0.2 # the amount of height reserved for white space between subplots
The actual defaults are controlled by the rc file
"""
fig = gcf()
fig.subplots_adjust(*args, **kwargs)
draw_if_interactive()
o
fig = plt.figure(figsize=(10,60))
fig.subplots_adjust( ... )
El tamaño de la imagen importa.
"He intentado desordenar 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 subparcela, la imagen total debe ser más grande.