subplots_adjust subplots separation multiple hspace python matplotlib figure axes

subplots - subplot title python



¿Cuáles son las diferencias entre add_axes y add_subplot? (1)

Motivos comunes

Tanto add_axes como add_subplot agregan un eje a una figura. Ambos devuelven un objeto matplotlib.axes.Axes .

Sin embargo, el mecanismo que se utiliza para agregar los ejes difiere sustancialmente.

add_axes

La firma que llama a add_axes es add_axes(rect) , donde rect es una lista [x0, y0, width, height] denota el punto inferior izquierdo de los nuevos ejes en la figura de coordenadas (x0,y0) y su ancho y alto. Así, los ejes se posicionan en coordenadas absolutas en el lienzo. P.ej

fig = plt.figure() ax = fig.add_axes([0,0,1,1])

coloca una figura en el lienzo que es exactamente tan grande como el lienzo mismo.

add_subplot

La firma de add_subplot de add_subplot no proporciona directamente la opción de colocar los ejes en una posición predefinida. Más bien, permite especificar dónde deben situarse los ejes de acuerdo con una cuadrícula de subtrama. La forma habitual y más fácil de especificar esta posición es la notación de 3 enteros,

fig = plt.figure() ax = fig.add_subplot(231)

En este ejemplo, se crean nuevos ejes en la primera posición ( 1 ) en una cuadrícula de 2 filas y 3 columnas. Para producir solo un solo eje, se add_subplot(111) (Primera gráfica en una cuadrícula de 1 por 1).

La ventaja de este método es que matplotlib se ocupa del posicionamiento exacto. Por defecto, add_subplot(111) generaría un eje posicionado en [0.125,0.11,0.775,0.77] o similar, que ya deja suficiente espacio alrededor de los ejes para el título y las etiquetas (marca de verificación). Sin embargo, esta posición también puede cambiar dependiendo de otros elementos en el gráfico, conjunto de títulos, etc. También se puede ajustar utilizando pyplot.subplots_adjust(...) o pyplot.tight_layout() .

En la mayoría de los casos, add_subplot sería el método preferido para crear ejes para gráficos en un lienzo. Solo en los casos en que importa el posicionamiento exacto, add_axes puede ser útil.

Ejemplo

import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (5,3) fig = plt.figure() fig.add_subplot(241) fig.add_subplot(242) ax = fig.add_subplot(223) ax.set_title("subplots") fig.add_axes([0.77,.3,.2,.6]) ax2 =fig.add_axes([0.67,.5,.2,.3]) fig.add_axes([0.6,.1,.35,.3]) ax2.set_title("random axes") plt.tight_layout() plt.show()

Alternativa

La forma más fácil de obtener una o más subparcelas junto con sus identificadores es plt.subplots() . Para uno de los ejes, use

fig, ax = plt.subplots()

o, si se necesitan más subtramas,

fig, axes = plt.subplots(nrows=3, ncols=4)

La pregunta inicial

En la pregunta inicial, se colocó un eje utilizando fig.add_axes([0,0,1,1]) , de manera que se asiente a los límites de la figura. La desventaja de esto es, por supuesto, que se eliminan los ticks, ticklabels, las etiquetas de los ejes y los títulos. Por lo tanto, en uno de los comentarios a la respuesta, fig.add_subplot usar fig.add_subplot ya que esto permitirá automáticamente suficiente espacio para esos elementos y, si esto no es suficiente, se puede ajustar utilizando pyplot.subplots_adjust(...) o pyplot.tight_layout() .

En una answer anterior, me recomendaron usar add_subplot lugar de add_axes para mostrar los ejes correctamente, pero buscando la documentación no pude entender cuándo y por qué debería usar una de estas funciones.

¿Alguien puede explicar las diferencias?