how font change python matplotlib

python - how to change font size matplotlib



Cómo eliminar las brechas entre las subtramas en matplotlib? (4)

¿Has probado plt.tight_layout() ?

con plt.tight_layout() sin ello:

O bien: algo como esto (use add_axes )

left=[0.1,0.3,0.5,0.7] width=[0.2,0.2, 0.2, 0.2] rectLS=[] for x in left: for y in left: rectLS.append([x, y, 0.2, 0.2]) axLS=[] fig=plt.figure() axLS.append(fig.add_axes(rectLS[0])) for i in [1,2,3]: axLS.append(fig.add_axes(rectLS[i],sharey=axLS[-1])) axLS.append(fig.add_axes(rectLS[4])) for i in [1,2,3]: axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1])) axLS.append(fig.add_axes(rectLS[8])) for i in [5,6,7]: axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1])) axLS.append(fig.add_axes(rectLS[12])) for i in [9,10,11]: axLS.append(fig.add_axes(rectLS[i+4],sharex=axLS[i],sharey=axLS[-1]))

Si no necesita compartir ejes, simplemente axLS=map(fig.add_axes, rectLS)

El siguiente código produce brechas entre las subtramas. ¿Cómo elimino las brechas 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()


El problema es el uso de aspect=''equal'' , que impide que las subtramas se extiendan a una relación de aspecto arbitraria y llenen todo el espacio vacío.

Normalmente, esto funcionaría:

import matplotlib.pyplot as plt ax = [plt.subplot(2,2,i+1) for i in range(4)] for a in ax: a.set_xticklabels([]) a.set_yticklabels([]) plt.subplots_adjust(wspace=0, hspace=0)

El resultado es esto:

Sin embargo, con aspect=''equal'' , como en el siguiente código:

import matplotlib.pyplot as plt ax = [plt.subplot(2,2,i+1) for i in range(4)] for a in ax: a.set_xticklabels([]) a.set_yticklabels([]) a.set_aspect(''equal'') plt.subplots_adjust(wspace=0, hspace=0)

Esto es lo que obtenemos:

La diferencia en este segundo caso es que ha obligado a los ejes x e y 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 trazar cualquier cosa), el uso de aspect=''equal'' obliga a cada eje a ser un cuadrado. Como la figura no es un cuadrado, pyplot agrega espacio adicional entre los ejes horizontalmente.

Para evitar este problema, puede establecer que su figura tenga la relación de aspecto correcta. Vamos a utilizar aquí la interfaz pyplot orientada a objetos, que considero superior en general:

import matplotlib.pyplot as plt fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio ax = [fig.add_subplot(2,2,i+1) for i in range(4)] for a in ax: a.set_xticklabels([]) a.set_yticklabels([]) a.set_aspect(''equal'') fig.subplots_adjust(wspace=0, hspace=0)

Este es el resultado:


Puede usar gridspec para controlar el espaciado entre ejes. Hay más information aquí.

import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec plt.figure(figsize = (4,4)) gs1 = gridspec.GridSpec(4, 4) gs1.update(wspace=0.025, hspace=0.05) # set the spacing between axes. for i in range(16): # i = i + 1 # grid spec indexes from 0 ax1 = plt.subplot(gs1[i]) plt.axis(''on'') ax1.set_xticklabels([]) ax1.set_yticklabels([]) ax1.set_aspect(''equal'') plt.subp plt.show()


Sin recurrir a gridspec completo, también se puede utilizar lo siguiente para eliminar las lagunas al establecer wspace y hspace en cero:

import matplotlib.pyplot as plt plt.clf() f, axarr = plt.subplots(4, 4, gridspec_kw = {''wspace'':0, ''hspace'':0}) for i, ax in enumerate(f.axes): ax.grid(''on'', linestyle=''--'') ax.set_xticklabels([]) ax.set_yticklabels([]) plt.show() plt.close()

Resultando en: