本文共 1418 字,大约阅读时间需要 4 分钟。
矩阵图表库 Matplotlib 中的 quiver 和 quiverkey 功能可以用来绘制矢量字段图,并添加注释以显示数据的单位和方向。然而,这些功能在处理图像缩放时存在一个常见问题:箭头的缩放不考虑边缘的可视范围,可能导致边缘的箭头超出图像范围。解决这一问题的工作-around是手动调整坐标轴的范围。
以下是几个使用 quiver 和 quiverkey 的示例:
import matplotlib.pyplot as pltimport numpy as npX, 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)plt.figure()plt.title('Arrows scale with plot width, not view')Q = plt.quiver(X, Y, U, V, units='width') # 箭头按图像宽度缩放qk = plt.quiverkey(Q, 0.9, 0.9, 2, r'$2 \frac{m}{s}$', labelpos='E', coordinates='figure') # 添加注释plt.figure()plt.title("pivot='mid'; every third arrow; units='inches'")Q = plt.quiver(X[::3, ::3], Y[::3, ::3], U[::3, ::3], V[::3, ::3], pivot='mid', units='inches') # 箭头以每个第三个箭头为基准,单位为英寸qk = plt.quiverkey(Q, 0.9, 0.9, 1, r'$1 \frac{m}{s}$', labelpos='E', coordinates='figure') # 添加注释plt.scatter(X[::3, ::3], Y[::3, ::3], color='r', s=5) # 添加标记plt.figure()plt.title("pivot='tip'; scales with x view")M = np.hypot(U, V)Q = plt.quiver(X, Y, U, V, M, units='x', pivot='tip', width=0.022, scale=1 / 0.15) # 箭头以箭头头部为基准,按 x 轴缩放qk = plt.quiverkey(Q, 0.9, 0.9, 1, r'$1 \frac{m}{s}$', labelpos='E', coordinates='figure') # 添加注释plt.scatter(X, Y, color='k', s=5) # 添加标记 通过上述示例可以看到,quiver 和 quiverkey 函数提供了灵活的矢量图绘制工具。无论是按宽度、英寸还是 x 轴缩放,都可以通过设置不同的参数来实现。然而,手动调整坐标轴范围仍然是解决边缘箭头超出图像范围的有效方法。
转载地址:http://fetfk.baihongyu.com/