Nota
Haga clic aquí para descargar el código de ejemplo completo
Aspecto de la caja de ejes #
Esta demostración muestra cómo configurar el aspecto de un cuadro de ejes directamente a través de
set_box_aspect
. El aspecto de la caja es la relación entre la altura y el ancho de los ejes en unidades físicas, independientemente de los límites de datos. Esto es útil, por ejemplo, para producir un gráfico cuadrado, independientemente de los datos que contenga, o para tener un gráfico habitual con las mismas dimensiones de los ejes junto a un gráfico de imagen con aspecto (de datos) fijo.
A continuación, se enumeran algunos casos de uso para set_box_aspect
.
A ejes cuadrados, independientes del dato #
Produzca ejes cuadrados, sin importar cuáles sean los límites de datos.
import numpy as np
import matplotlib.pyplot as plt
fig1, ax = plt.subplots()
ax.set_xlim(300, 400)
ax.set_box_aspect(1)
plt.show()
Ejes gemelos cuadrados #
Producir ejes cuadrados, con ejes gemelos. Los ejes gemelos asumen el aspecto de caja del padre.
fig3, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot([0, 10])
ax2.plot([12, 10])
ax.set_box_aspect(1)
plt.show()
Trama normal al lado de la imagen #
Al crear un gráfico de imagen con aspecto de datos fijos y el valor predeterminado
adjustable="box"
junto a un gráfico normal, los ejes tendrían una altura desigual. set_box_aspect
proporciona una solución fácil para eso al permitir que los ejes de la trama normal usen las dimensiones de las imágenes como aspecto del cuadro.
Este ejemplo también muestra que constrained_layout
interactúa muy bien con un aspecto de caja fija.
fig4, (ax, ax2) = plt.subplots(ncols=2, constrained_layout=True)
np.random.seed(19680801) # Fixing random state for reproducibility
im = np.random.rand(16, 27)
ax.imshow(im)
ax2.plot([23, 45])
ax2.set_box_aspect(im.shape[0]/im.shape[1])
plt.show()
Parcela de junta cuadrada/marginal #
Puede ser deseable mostrar distribuciones marginales al lado de una gráfica de datos conjuntos. Lo siguiente crea un gráfico cuadrado con el aspecto de caja de los ejes marginales igual a las proporciones de ancho y alto de la cuadrícula. Esto asegura que todos los ejes se alineen perfectamente, independientemente del tamaño de la figura.
fig5, axs = plt.subplots(2, 2, sharex="col", sharey="row",
gridspec_kw=dict(height_ratios=[1, 3],
width_ratios=[3, 1]))
axs[0, 1].set_visible(False)
axs[0, 0].set_box_aspect(1/3)
axs[1, 0].set_box_aspect(1)
axs[1, 1].set_box_aspect(3/1)
np.random.seed(19680801) # Fixing random state for reproducibility
x, y = np.random.randn(2, 400) * [[.5], [180]]
axs[1, 0].scatter(x, y)
axs[0, 0].hist(x)
axs[1, 1].hist(y, orientation="horizontal")
plt.show()
Parcela de junta cuadrada/marginal #
Al configurar el aspecto de la caja, también se puede configurar el aspecto de los datos. Aquí creamos un eje con un cuadro el doble de largo que alto y usamos un aspecto de datos "igual" para su contenido, es decir, el círculo en realidad permanece circular.
fig6, ax = plt.subplots()
ax.add_patch(plt.Circle((5, 3), 1))
ax.set_aspect("equal", adjustable="datalim")
ax.set_box_aspect(0.5)
ax.autoscale()
plt.show()
Aspecto de caja para muchas subtramas #
Es posible pasar el aspecto de la caja a un eje en la inicialización. Lo siguiente crea una cuadrícula de subtrama de 2 por 3 con todos los ejes cuadrados.
fig7, axs = plt.subplots(2, 3, subplot_kw=dict(box_aspect=1),
sharex=True, sharey=True, constrained_layout=True)
for i, ax in enumerate(axs.flat):
ax.scatter(i % 3, -((i // 3) - 0.5)*200, c=[plt.cm.hsv(i / 6)], s=300)
plt.show()
Referencias
En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos:
Tiempo total de ejecución del script: (0 minutos 2,779 segundos)