使用 Python 中的 Matplotlib 创建流线图

Beginner

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

简介

本教程将指导你使用 Python 中的 Matplotlib 创建流线图的过程。流线图是一种二维向量场,用于显示一组流线。它用于可视化流体流动和其他向量场。在本教程中,我们将向你展示如何创建一个具有变化密度、颜色和线宽的流线图,同时控制流线的起点。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

在开始之前,我们需要导入所需的库。在本教程中,我们将使用 Numpy 和 Matplotlib 库。Numpy 用于数值运算,Matplotlib 用于数据可视化。

import matplotlib.pyplot as plt
import numpy as np

创建数据

我们将使用 Numpy 库为我们的流线图创建数据。在这个例子中,我们将在两个方向上创建一个包含 100 个点的网格,并计算向量场的 U 和 V 分量。

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)

变化的密度

在这一步中,我们将创建一个具有变化密度的流线图。density 参数控制要绘制的流线数量。较高的值将导致更多的流线。

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

变化的颜色

在这一步中,我们将创建一个具有变化颜色的流线图。color 参数接受一个二维数组,该数组表示向量场的大小。在这里,我们使用向量场的 U 分量作为颜色。

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

变化的线宽

在这一步中,我们将创建一个具有变化线宽的流线图。linewidth 参数控制流线的宽度。在这里,我们使用之前计算的 speed 数组来改变线宽。

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()

控制起始点

在这一步中,我们将创建一个具有可控起始点的流线图。start_points 参数接受一个二维数组,该数组表示流线的起始点。

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()

带掩码的流线图

在这一步中,我们将创建一个带掩码的流线图。我们将创建一个掩码并将其应用于向量场的 U 分量。流线将跳过被掩码的区域。

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()

不间断的流线

在这一步中,我们将创建一个具有不间断流线的流线图。broken_streamlines 参数控制当流线超出单个网格单元内的线条限制时是否应断开。

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

总结

在本教程中,我们学习了如何使用 Python 中的 Matplotlib 创建流线图。我们介绍了 streamplot 函数的各种参数,包括变化的密度、颜色和线宽。我们还学习了如何控制流线的起始点、应用掩码以及绘制不间断的流线。