Matplotlib 中 quiver 和 quiverkey 函数的高级用法

MatplotlibMatplotlibBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Matplotlib 是 Python 中的一个数据可视化库,它允许用户创建各种各样的二维和三维图表。Matplotlib 的众多实用功能之一是能够创建矢量图(quiver plot),用于显示矢量场。

本实验将介绍 Matplotlib 中 quiver()quiverkey() 函数的一些高级选项。这些函数允许对矢量图中的箭头进行定制,包括箭头比例、枢轴点和箭头频率。

虚拟机使用提示

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

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

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

箭头随绘图宽度缩放,而非视图

quiver() 函数可用于创建矢量图。默认情况下,图中的箭头会随数据缩放,而非绘图本身。这可能会导致靠近绘图边缘的箭头难以看清。

import matplotlib.pyplot as plt
import numpy as np

X, Y = np.meshgrid(np.arange(0, 2 * np.pi,.2), np.arange(0, 2 * np.pi,.2))
U = np.cos(X)
V = np.sin(Y)

fig1, ax1 = plt.subplots()
ax1.set_title('Arrows scale with plot width, not view')
Q = ax1.quiver(X, Y, U, V, units='width')
qk = ax1.quiverkey(Q, 0.9, 0.9, 2, r'$2 \frac{m}{s}$', labelpos='E',
                   coordinates='figure')
plt.show()

枢轴点和箭头频率

quiver() 函数还可用于自定义箭头的枢轴点以及箭头的显示频率。pivot 参数可设置为 'mid''tip',并且传递给 quiver() 的数组可以切片,以便仅每隔第 n 个箭头显示一次。

fig2, ax2 = plt.subplots()
ax2.set_title("pivot='mid'; every third arrow; units='inches'")
Q = ax2.quiver(X[::3, ::3], Y[::3, ::3], U[::3, ::3], V[::3, ::3],
               pivot='mid', units='inches')
qk = ax2.quiverkey(Q, 0.9, 0.9, 1, r'$1 \frac{m}{s}$', labelpos='E',
                   coordinates='figure')
ax2.scatter(X[::3, ::3], Y[::3, ::3], color='r', s=5)
plt.show()

根据 x 视图缩放箭头

quiver() 函数还允许根据 x 视图缩放箭头。这对于根据数据以不同比例显示箭头很有用。

fig3, ax3 = plt.subplots()
ax3.set_title("pivot='tip'; scales with x view")
M = np.hypot(U, V)
Q = ax3.quiver(X, Y, U, V, M, units='x', pivot='tip', width=0.022,
               scale=1 / 0.15)
qk = ax3.quiverkey(Q, 0.9, 0.9, 1, r'$1 \frac{m}{s}$', labelpos='E',
                   coordinates='figure')
ax3.scatter(X, Y, color='0.5', s=1)
plt.show()

总结

本实验介绍了 Matplotlib 中 quiver()quiverkey() 函数的一些高级选项。这些选项允许对矢量图中的箭头进行定制,包括箭头比例、枢轴点和箭头频率。通过使用这些选项,用户可以创建更具信息性和视觉吸引力的矢量图。