Crear líneas multicolor en Matplotlib

Beginner

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

Introducción

En este laboratorio, aprenderemos a crear líneas multicolor en Matplotlib. Usaremos la función LineCollection para crear un conjunto de segmentos de línea y colorearlos individualmente según su derivada. También aprenderemos a usar una norma de frontera para colorear los segmentos de línea.

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 operaciones no puede automatizarse debido a las limitaciones de Jupyter Notebook.

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

Importar bibliotecas

Comenzaremos importando las bibliotecas necesarias para este laboratorio. Importaremos matplotlib.pyplot y numpy.

import matplotlib.pyplot as plt
import numpy as np

Crear datos

Crearemos una matriz de numpy x que contiene 500 valores espaciados uniformemente entre 0 y 3π. También crearemos otra matriz de numpy y que contiene el seno de los valores en x. Finalmente, crearemos una matriz de numpy dydx que contiene la primera derivada de y.

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))

Crear segmentos de línea

Crearemos un conjunto de segmentos de línea para poder colorearlos individualmente. Usaremos la función concatenate de numpy para concatenar dos matrices points[:-1] y points[1:] a lo largo del segundo eje. Luego, redimensionaremos la matriz resultante a una matriz N x 1 x 2 para que podamos apilar fácilmente los puntos para obtener los segmentos. La matriz de segmentos para la recopilación de líneas debe ser (numlines) x (puntos por línea) x 2 (para x e y).

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

Crear una norma continua

Crearemos una norma continua para mapear de puntos de datos a colores. Usaremos la función Normalize de matplotlib.pyplot para normalizar los valores de dydx entre su mínimo y máximo. Luego, usaremos la función LineCollection para crear un conjunto de segmentos de línea y colorearlos individualmente según su derivada. Usaremos la función set_array para establecer los valores utilizados para la asignación de colores.

norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

Crear una barra de colores

Crearemos una barra de colores para mostrar la asignación entre los colores y los valores de dydx. Usaremos la función colorbar de matplotlib.pyplot para crear una barra de colores.

line = plt.gca().add_collection(lc)
plt.colorbar(line)

Usar una norma de frontera

En lugar de eso, usaremos una norma de frontera para colorear los segmentos de línea. Crearemos un ListedColormap que contenga tres colores: rojo, verde y azul. Luego, crearemos una BoundaryNorm con los límites -1, -0.5, 0.5 y 1, y el ListedColormap. Usaremos la función set_array para establecer los valores utilizados para la asignación de colores.

cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

Crear un subgráfico

Crearemos un subgráfico para mostrar los segmentos de línea coloreados. Usaremos la función subplots de matplotlib.pyplot para crear una cuadrícula de subgráficos de 2x1, y los parámetros sharex y sharey para compartir los ejes x e y entre los subgráficos.

fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])

Establecer límites de eje

Estableceremos los límites de los ejes x e y para los subgráficos.

axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)

Mostrar la gráfica

Usaremos la función show de matplotlib.pyplot para mostrar la gráfica.

plt.show()

Resumen

En este laboratorio, aprendimos cómo crear líneas multicolor en Matplotlib. Usamos la función LineCollection para crear un conjunto de segmentos de línea y colorearlos individualmente según su derivada. También aprendimos cómo usar una norma de frontera para colorear los segmentos de línea. Usamos la función Normalize para normalizar los valores de dydx entre su mínimo y máximo, y la función ListedColormap para crear un mapa de colores con tres colores: rojo, verde y azul. Usamos la función BoundaryNorm para crear una norma de frontera con los límites -1, -0.5, 0.5 y 1, y el ListedColormap. Finalmente, usamos la función subplots para crear una cuadrícula de subgráficos de 2x1, y los parámetros sharex y sharey para compartir los ejes x e y entre los subgráficos. Luego mostramos la gráfica usando la función show.