所以,在Correct, "full length" left-right arrows in Matplotlib?之后,我意识到Matplotlib箭头还有一点棘手;考虑这个例子:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
ax.plot([0],[0])
ax.grid()
ax.set_xlim([0,10])
ax.set_ylim([0,10])
ax.annotate("", (2, 1), (4, 1), arrowprops={'arrowstyle':'<->', 'shrinkA': 0, 'shrinkB': 0})
ax.annotate("", (4, 1), (6, 1), arrowprops={'arrowstyle':'<->', 'shrinkA': 0, 'shrinkB': 0})
plt.show()
字符串
基本上,这里第一个箭头指向向右的点(x=4,y=1)作为其终点,第二个箭头指向向左的同一点作为其起点:
x1c 0d1x的数据
……事实上,它看起来很好。
然而,如果我删除网格(注解ax.grid()
行),我会得到这样的结果:
的
因此,在这个例子中,我可以看到从两边指向(4,1)的箭头并不相互接触--我希望它们这样做,以便给予一个视觉指示,表明它们都指向同一个点。如果我们使用图像应用程序放大:
的
.很明显,箭头之间的差距只有一个像素。
从本质上讲,我需要与shrink*
参数相反的参数(类似于“extend”)-我找不到这样的参数,所以我试图通过给shrink*
负值来作弊,但它们产生的结果与正值相同(它们显式地进行收缩)。
有什么方法可以实现这一点吗?只是为了澄清-我希望获得以下内容(也就是说,上一个图像上的1像素宽的差距,也被绘制):
的
......当缩小时,看起来像这样:
x1c4d 1x的
1条答案
按热度按时间pexxcrt21#
我发布这个作为一个答案,只是为了可读性(否则我会把它作为一个编辑发布到OP;很难找到一个简单的例子):
在下面的例子中,我尝试从多边形手动构造箭头;用一个小的
eps
ilon值替换箭头的“尖端”,将使它们看起来重叠/接触。(Point类只是为了可读性,更容易地指示考虑了哪些点坐标)。然而,问题是:也就是说,代码是:
字符串
这导致:
x1c 0d1x的数据
放大像素,箭头的重叠似乎不错:
的
.然而,如果我在Matplotlib中进行(“data”)缩放,右边的行最终会消失:
的
所以这并不是一个真正的“生产就绪”解决方案。