Matplotlib Inset Locator

Beginner

This tutorial is from open-source community. Access the source code

Introducción

Matplotlib es una biblioteca de visualización de datos en Python. La característica .inset_locator permite colocar fácilmente inserciones en las esquinas de los ejes. En este laboratorio, exploraremos cómo usar la característica .inset_locator para crear inserciones en los gráficos de Matplotlib.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos rápidamente el problema para usted.

Crear una figura con dos subgráficos

Primero, necesitamos crear una figura con dos subgráficos. Usaremos el método plt.subplots() para crear una figura con dos subgráficos uno al lado del otro.

import matplotlib.pyplot as plt

fig, (ax, ax2) = plt.subplots(1, 2, figsize=[5.5, 2.8])

Crear ejes insertados

A continuación, crearemos ejes insertados en cada uno de los subgráficos. Usaremos el método inset_axes() para crear los ejes insertados. Crearemos cuatro insets con diferentes tamaños y ubicaciones.

from mpl_toolkits.axes_grid1.inset_locator import inset_axes

## Crea un inset de 1,3 pulgadas de ancho y 0,9 pulgadas de alto
## en la ubicación predeterminada de la esquina superior derecha
axins = inset_axes(ax, width=1.3, height=0.9)

## Crea un inset con un 30% del ancho y un 40% de la altura del
## cuadro delimitador del eje padre
## en la esquina inferior izquierda (loc=3)
axins2 = inset_axes(ax, width="30%", height="40%", loc=3)

## Crea un inset con especificaciones mixtas en el segundo subgráfico;
## el ancho es el 30% del cuadro delimitador del eje padre y
## la altura es de 1 pulgada en la esquina superior izquierda (loc=2)
axins3 = inset_axes(ax2, width="30%", height=1., loc=2)

## Crea un inset en la esquina inferior derecha (loc=4) con un borde de 1, es decir,
## 10 puntos de relleno (ya que 10pt es el tamaño de fuente predeterminado)
## con respecto al eje padre
axins4 = inset_axes(ax2, width="20%", height="20%", loc=4, borderpad=1)

Desactivar las etiquetas de las marcas de graduación

Para eliminar las etiquetas de las marcas de graduación de cada uno de los insets, podemos usar el método tick_params() y establecer labelleft y labelbottom en False.

## Desactiva las etiquetas de las marcas de graduación de los insets
for axi in [axins, axins2, axins3, axins4]:
    axi.tick_params(labelleft=False, labelbottom=False)

Controlar la posición y el tamaño del inset

Podemos usar los parámetros bbox_to_anchor y bbox_transform para controlar la posición y el tamaño del inset. Estos parámetros permiten un control detallado de la posición y el tamaño del inset o incluso para posicionar el inset en posiciones completamente arbitrarias.

## Usamos la transformación de los ejes como bbox_transform. Por lo tanto, el cuadro delimitador
## debe especificarse en coordenadas de ejes ((0, 0) es la esquina inferior izquierda
## del eje, (1, 1) es la esquina superior derecha).
## El cuadro delimitador (.2,.4,.6,.5) comienza en (.2,.4) y abarca hasta (.8,.9)
## en esas coordenadas.
## Dentro de este cuadro delimitador se crea un inset con la mitad del ancho del cuadro delimitador y
## tres cuartos de la altura del cuadro delimitador. La esquina inferior izquierda
## del inset se alinea con la esquina inferior izquierda del cuadro delimitador (loc=3).
## El inset luego se desplaza por el valor predeterminado de 0,5 en unidades del tamaño de fuente.
axins = inset_axes(ax, width="50%", height="75%",
                   bbox_to_anchor=(.2,.4,.6,.5),
                   bbox_transform=ax.transAxes, loc=3)

Crear insets con posiciones arbitrarias

Podemos crear insets con posiciones arbitrarias usando el parámetro bbox_to_anchor para especificar un cuadro delimitador en coordenadas de datos y usando el parámetro bbox_transform para especificar la transformación para el cuadro delimitador.

## Crea un inset en coordenadas de datos usando ax.transData como transformación
axins3 = inset_axes(ax2, width="100%", height="100%",
                    bbox_to_anchor=(1e-2, 2, 1e3, 3),
                    bbox_transform=ax2.transData, loc=2, borderpad=0)

Crear un inset fuera del eje

Podemos crear un inset fuera del eje usando el parámetro bbox_to_anchor para especificar un cuadro delimitador en coordenadas de ejes que se extiende fuera del eje.

## Crea un inset fuera del eje
axins = inset_axes(ax, width="100%", height="100%",
                   bbox_to_anchor=(1.05,.6,.5,.4),
                   bbox_transform=ax.transAxes, loc=2, borderpad=0)

Crear un inset con un cuadro delimitador de 2-tupla

Podemos crear un inset con un cuadro delimitador de 2-tupla especificando el ancho y la altura en pulgadas y usando el parámetro bbox_to_anchor para especificar la esquina inferior izquierda del inset.

## Crea un inset con un cuadro delimitador de 2-tupla. Tenga en cuenta que esto crea un
## bbox sin extensión. Por lo tanto, solo tiene sentido cuando se especifica
## el ancho y la altura en unidades absolutas (pulgadas).
axins2 = inset_axes(ax, width=0.5, height=0.4,
                    bbox_to_anchor=(0.33, 0.25),
                    bbox_transform=ax.transAxes, loc=3, borderpad=0)

Crear un inset centrado en las coordenadas de la figura

Podemos crear un inset que está horizontalmente centrado en las coordenadas de la figura y verticalmente vinculado para alinearse con los ejes usando el método blended_transform_factory() para crear una transformación combinada y usándola como el parámetro bbox_transform.

## Crea un inset horizontalmente centrado en las coordenadas de la figura y verticalmente
## vinculado para alinearse con los ejes.
from matplotlib.transforms import blended_transform_factory

transform = blended_transform_factory(fig.transFigure, ax2.transAxes)
axins4 = inset_axes(ax2, width="16%", height="34%",
                    bbox_to_anchor=(0, 0, 1, 1),
                    bbox_transform=transform, loc=8, borderpad=0)

Resumen

En este laboratorio, aprendimos cómo usar la característica .inset_locator en Matplotlib para crear insets en los gráficos. Creamos insets con diferentes tamaños y ubicaciones, controlamos la posición y el tamaño del inset y creamos insets con posiciones arbitrarias. También creamos insets fuera del eje, insets con cuadros delimitadores de 2-tupla y insets centrado en las coordenadas de la figura.