Crear gráficos de Matplotlib con dos ejes y

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este tutorial, aprenderá a crear un gráfico con dos ejes y utilizando Matplotlib. El gráfico mostrará dos conjuntos de datos con diferentes unidades de medida en diferentes escalas. Este tipo de gráfico se utiliza comúnmente en la investigación científica para visualizar las relaciones entre variables que no son directamente comparables.

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 lo resolveremos rápidamente para usted.

Importar bibliotecas

Primero, necesitamos importar las bibliotecas necesarias. Utilizaremos Matplotlib y su módulo parasite_axes para crear el gráfico.

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
from mpl_toolkits.axes_grid1.parasite_axes import HostAxes

Definir datos

A continuación, necesitamos definir los datos que se graficarán. En este ejemplo, tenemos un conjunto de observaciones con cuatro variables: nombre, movimiento propio angular, error en el movimiento propio angular y distancia. Convertiremos el movimiento propio angular a velocidad lineal y lo graficaremos contra el FWHM (ancho total a la mitad de la máxima amplitud) de las observaciones.

obs = [["01_S1", 3.88, 0.14, 1970, 63],
       ["01_S4", 5.6, 0.82, 1622, 150],
       ["02_S1", 2.4, 0.54, 1570, 40],
       ["03_S1", 4.1, 0.62, 2380, 170]]

## Factor de conversión del movimiento propio angular a velocidad lineal
pm_to_kms = 1./206265.*2300*3.085e18/3.15e7/1.e5

Crear el gráfico

Ahora crearemos el gráfico utilizando las funciones HostAxes y twin() del módulo parasite_axes. HostAxes se utiliza para crear el gráfico principal y twin() se utiliza para crear el eje y secundario.

fig = plt.figure()

## Crear objeto HostAxes
ax_kms = fig.add_subplot(axes_class=HostAxes, aspect=1)

## Crear eje y secundario con coordenadas transformadas
aux_trans = mtransforms.Affine2D().scale(pm_to_kms, 1.)
ax_pm = ax_kms.twin(aux_trans)

## Graficar los datos
for n, ds, dse, w, we in obs:
    time = ((2007 + (10. + 4/30.)/12) - 1988.5)
    v = ds / time * pm_to_kms
    ve = dse / time * pm_to_kms
    ax_kms.errorbar([v], [w], xerr=[ve], yerr=[we], color="k")

## Establecer las etiquetas de los ejes
ax_kms.axis["bottom"].set_label("Velocidad lineal a 2.3 kpc [km/s]")
ax_kms.axis["left"].set_label("FWHM [km/s]")
ax_pm.axis["top"].set_label(r"Movimiento propio [$''$/yr]")

## Ocultar las etiquetas de los ticks en el eje y secundario
ax_pm.axis["right"].major_ticklabels.set_visible(False)

## Establecer los límites del gráfico
ax_kms.set_xlim(950, 3700)
ax_kms.set_ylim(950, 3100)

Mostrar el gráfico

Finalmente, mostraremos el gráfico utilizando la función plt.show().

plt.show()

Resumen

En este tutorial, aprendiste cómo crear un gráfico con dos ejes y utilizando Matplotlib. Aprendiste cómo definir los datos, crear el gráfico y mostrar el gráfico. Este tipo de gráfico es útil para visualizar las relaciones entre variables que no son directamente comparables.