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?