如何在matplotlib的quiver(箭头)图中设置多种不同线型?
问题原因
matplotlib.pyplot.quiver() 的 linestyle 参数不支持传入序列为每个箭头单独设置线型,仅支持全局指定统一线型,这是你原代码传参无效的核心原因。
实现方案
你可以将相同线型+颜色的箭头分组,分批调用quiver()绘制,即可实现不同箭头不同线型的需求,修正后的完整代码如下:
import numpy as np import matplotlib.pyplot as plt # 定义矢量数据集 V = np.array([[-8.51111054e-01, -2.07125731e-02], [ 1.00514114e+00, 1.45925842e-02], [-9.20205414e-01, -8.90733267e-04], [-5.49162030e-01, -5.72392077e-04], [-3.20711851e-01, 1.04597686e-02], [ 7.85996497e-01, 1.78952999e-02]]) plt.figure() # 按属性分组绘制:实线组对应索引0/2/4,虚线组对应索引1/3/5 solid_idx = [0,2,4] dash_idx = [1,3,5] color_list = ['b','b','r','r','k','k'] # 绘制实线箭头 plt.quiver(np.zeros(len(solid_idx)), np.zeros(len(solid_idx)), V[solid_idx,0], V[solid_idx,1], angles='xy', scale_units='xy', color=np.array(color_list)[solid_idx], linestyle='-', scale=1) # 绘制虚线箭头 plt.quiver(np.zeros(len(dash_idx)), np.zeros(len(dash_idx)), V[dash_idx,0], V[dash_idx,1], angles='xy', scale_units='xy', color=np.array(color_list)[dash_idx], linestyle='--', scale=1) # 修正原代码中未定义的b变量,改为取y分量的最值 plt.xlim(-1.5, 1.7) plt.ylim(V[:,1].min()*1.2, V[:,1].max()*1.2) plt.show()
如果你的箭头属性规则更复杂,也可以直接循环逐个绘制单个箭头,灵活度更高。
内容的提问来源于stack exchange,提问作者Paul Goyes
相关产品推荐
相关产品推荐

