我正在通过创建矢量图来分析一些数据。所有向量的长度都是1个单位。大多数显示良好,但某些向量,如:
fig = plt.figure()
plt.axes(xlim=(-24, 24), ylim=(0, 150))
plt.quiver([-19.1038], [96.5851], [-19.1001+19.1038], [97.5832-96.5851],angles='xy', scale_units='xy', scale=1, headwidth=1, headlength=10, minshaft=5)
plt.show()
作为一个点出现。(请注意,我并不是像这样单独绘制向量;我只是绘制这个特定的向量来调试代码。)这似乎只发生在几乎垂直的向量上。我还注意到,如果我“放大”向量(即更改轴比例),这个问题就解决了。但是,我不能这样做,因为我的绘图中的许多其他向量将超出域/范围。有没有别的办法解决这个问题?在
问题如下图所示:
您的问题有两个部分,它们都与您选择如何表示数据有关。在
quiver
的默认行为是自动将向量缩放到合理的大小,以获得漂亮的结果。The documentation也说明了:然后呢
所以在您的例子中,您告诉
quiver
以xy
数据单元绘制箭头。因为您的箭头是单位长度的,所以它被绘制为1长度的箭头。另一方面,你的数据限制是巨大的:40个单位宽,150个单位高。在这个比例下,长度为1的箭头太小了,matplotlib决定截断箭头并绘制一个点。在如果像你自己说的那样放大,箭头就会出现。如果我们把你的箭头变成牙签的参数去掉,如果你看得足够近(不是轴线),你绘制的箭头就非常完美了:
现在,问题是为什么这种行为取决于向量的方向。这种行为的原因是,在绘图中x和y的限制是不同的,因此单位长度的水平线和单位长度的垂直线包含不同数量的像素(因为数据是以xy单位缩放的)。这意味着,虽然水平箭头足够长,可以精确地表示,但是垂直箭头变得非常短,matplotlib决定将它们截断为点,这在默认箭头格式下不应该太明显,但对于自定义箭头来说,这是非常糟糕的。您的用例是这样的,matplotlib使用的渲染截止线恰好位于水平向量的长度和垂直向量的长度之间。在
你有两个直接的选择。一种方法是将箭头的缩放比例增加到每个方向都能精确表示的点。这可能是在一个小XY问题中Y的解。你真正应该做的是准确地表示你的数据。因为你用xy数据单位来绘制向量场,你大概希望你的
x
和y
轴的大小相等,你希望你的箭头有视觉上的单位长度(即独立于它们的方向的长度)。在因此,我建议您强制您的绘图在两个轴上具有相等的单位,但以矩形图形结束为代价:
相信我:里面有一支小箭。主要的一点是,这样一来,你的所有向量要么都是点(如果你放大得太大),要么它们都不是。然后你就有了一个正常的情况,可以相应地选择向量的整体比例。在
相关问题 更多 >
编程相关推荐