



向量场是一种在空间中为每个点分配向量的函数,即在空间上定义的向量值函数。这些在微分方程(方程组)的研究中尤其常见,向量场通常出现在方程的右侧(更详细的信息,请参阅第3章中的例子)。因此,通过可视化向量场,我们可以更好地理解函数在空间中的演变。现在,我们只需要使用箭头图(quiver plot)来绘制向量场。箭头图接受一组 x 和 y 坐标及一组d x 和d y 向量,并绘制一幅图,其中每个点上都有一个指向(d x , d y )方向的箭头,箭头的长度即该向量的长度(希望在实际创建图形时,这些箭头会更加清晰)。
和往常一样,我们导入Matplotlib的pyplot接口,将其命名为别名plt。在开始之前,我们需要定义一个函数,该函数接受一个点并生成一个向量。我们稍后将使用它来生成d x 和d y 数据,然后将其传递给绘图函数。
在这个示例中,我们将绘制以下向量场:
在这个例子中,我们将在-1≤ x ≤1且-1≤ y ≤1的区域上绘制向量场。
以下步骤展示了如何在指定的区域上可视化上述向量场。
1.我们需要定义一个Python函数,用于在各个点计算向量场:
2.我们需要创建覆盖该区域的网格点。为此,我们首先创建一个值在-1和1之间的临时linspace例程。然后,我们使用meshgrid生成网格点:
3.使用我们定义的函数生成dx和dy值,这些值描述了每个网格点的向量:
4.现在,我们可以创建一个新图形和坐标轴,并使用quiver方法生成图形:
结果如图2.10所示。
图2.10 使用箭头图对向量场进行可视化
在图2.10中,我们可以看到(d x , d y )值表示为( x , y )坐标处的箭头。箭头的大小由向量场的幅度决定。在原点处,向量场的(d x , d y )=(0,0),因此原点附近的箭头非常小。
在这个示例中我们使用了一个数学构造,而不是真实世界中可能出现的实际数据。对于这种特殊情况,箭头描述了某个量随我们指定的向量场流动的演化过程。
网格中的每个点都是箭头的基点。箭头的方向由相应的(d x , d y )值给定,而箭头的长度按长度进行归一化(因此,具有较小分量的向量(d x , d y )会产生较短的箭头)。这可以通过更改scale关键字参数进行自定义,图形的许多其他方面也可以自定义。
如果要绘制沿着向量场运动的一组轨迹,可以使用streamplot方法。这将绘制从不同点开始的轨迹,以指示域的不同部分的总体流动。每条流线都有一个箭头表示流动的方向。例如,图2.11显示了本例中使用向量场的streamplot方法得到的结果。
图2.11 示例向量场描述的轨迹图
在另一种情况下,你可能在多个坐标点处(比如在地图上)有风速(或类似的量)的数据,并且希望以天气图的标准样式绘制这些数据。这时,我们可以使用barbs绘图方法,其参数类似于quiver方法。