Crear un gráfico de flujo con Matplotlib en Python

MatplotlibMatplotlibBeginner
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

Este tutorial lo guiará a través del proceso de creación de un gráfico de flujo usando Matplotlib en Python. Un gráfico de flujo es un campo vectorial bidimensional que muestra un conjunto de líneas de corriente. Se utiliza para visualizar el flujo de fluidos y otros campos vectoriales. En este tutorial, le mostraremos cómo crear un gráfico de flujo con densidad, color y ancho de línea variables, así como controlar los puntos de inicio de las líneas de corriente.

Consejos sobre la VM

Una vez que se haya iniciado 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 comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar bibliotecas

Antes de comenzar, necesitamos importar las bibliotecas necesarias. En este tutorial, usaremos las bibliotecas Numpy y Matplotlib. Numpy se utiliza para operaciones numéricas y Matplotlib se utiliza para la visualización de datos.

import matplotlib.pyplot as plt
import numpy as np

Crear datos

Vamos a crear los datos para nuestro gráfico de flujo usando la biblioteca Numpy. En este ejemplo, crearemos una malla (meshgrid) con 100 puntos en ambas direcciones y calcularemos los componentes U y V de nuestro campo vectorial.

w = 3
Y, X = np.mgrid[-w:w:100j, -w:w:100j]
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U**2 + V**2)

Densidad variable

En este paso, crearemos un gráfico de flujo con densidad variable. El parámetro density controla el número de líneas de corriente que se van a trazar. Valores más altos resultarán en más líneas de corriente.

plt.streamplot(X, Y, U, V, density=[0.5, 1])
plt.title('Varying Density')
plt.show()

Color variable

En este paso, crearemos un gráfico de flujo con color variable. El parámetro color toma una matriz bidimensional que representa la magnitud del campo vectorial. Aquí, estamos usando el componente U del campo vectorial como el color.

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2, cmap='autumn')
plt.colorbar(strm.lines)
plt.title('Varying Color')
plt.show()

Ancho de línea variable

En este paso, crearemos un gráfico de flujo con ancho de línea variable. El parámetro linewidth controla el ancho de las líneas de corriente. Aquí, estamos usando la matriz speed que calculamos anteriormente para variar el ancho de línea.

lw = 5*speed / speed.max()
plt.streamplot(X, Y, U, V, density=0.6, color='k', linewidth=lw)
plt.title('Varying Line Width')
plt.show()

Controlar los puntos de inicio

En este paso, crearemos un gráfico de flujo con puntos de inicio controlados. El parámetro start_points toma una matriz bidimensional que representa los puntos de inicio de las líneas de corriente.

seed_points = np.array([[-2, -1, 0, 1, 2, -1], [-2, -1, 0, 1, 2, 2]])

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2,
                      cmap='autumn', start_points=seed_points.T)
plt.colorbar(strm.lines)
plt.title('Controlling Starting Points')
plt.plot(seed_points[0], seed_points[1], 'bo')
plt.xlim(-w, w)
plt.ylim(-w, w)
plt.show()

Gráfico de flujo con enmascaramiento

En este paso, crearemos un gráfico de flujo con enmascaramiento. Crearemos una máscara y la aplicaremos al componente U de nuestro campo vectorial. La región enmascarada será omitida por las líneas de corriente.

mask = np.zeros(U.shape, dtype=bool)
mask[40:60, 40:60] = True
U[:20, :20] = np.nan
U = np.ma.array(U, mask=mask)

plt.streamplot(X, Y, U, V, color='r')
plt.title('Streamplot with Masking')
plt.imshow(~mask, extent=(-w, w, -w, w), alpha=0.5, cmap='gray', aspect='auto')
plt.gca().set_aspect('equal')
plt.show()

Líneas de corriente sin interrupciones

En este paso, crearemos un gráfico de flujo con líneas de corriente sin interrupciones. El parámetro broken_streamlines controla si las líneas de corriente deben romperse cuando exceden el límite de líneas dentro de una sola celda de cuadrícula.

plt.streamplot(X, Y, U, V, broken_streamlines=False)
plt.title('Streamplot with Unbroken Streamlines')
plt.show()

Resumen

En este tutorial, aprendimos cómo crear un gráfico de flujo usando Matplotlib en Python. Cubrimos varios parámetros de la función streamplot, incluyendo densidad variable, color y ancho de línea. También aprendimos cómo controlar los puntos de inicio de las líneas de corriente, aplicar máscaras y graficar líneas de corriente sin interrupciones.