Matplotlib 如何删除FancyArrowPatch箭头尖端和目标点之间的空白?
在拍摄一些箭头的图像时,我注意到箭头在指定的点之间没有达到全长 例如:Matplotlib 如何删除FancyArrowPatch箭头尖端和目标点之间的空白?,matplotlib,Matplotlib,在拍摄一些箭头的图像时,我注意到箭头在指定的点之间没有达到全长 例如: import matplotlib.pyplot as plt import matplotlib as mpl fig, ax = plt.subplots() fig.set_size_inches(5, 5) w = 0.001 h = 1000 ax.set_xlim(0, w) ax.set_ylim(0, h) ax.add_artist(mpl.patches.FancyArrowPatch(
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots()
fig.set_size_inches(5, 5)
w = 0.001
h = 1000
ax.set_xlim(0, w)
ax.set_ylim(0, h)
ax.add_artist(mpl.patches.FancyArrowPatch(
(w*1/3, h*0.0),
(w*1/3, h*1.0),
edgecolor='black',
facecolor='red',
arrowstyle=mpl.patches.ArrowStyle.CurveFilledAB(head_length=10, head_width=10)
))
ax.add_artist(mpl.patches.FancyArrowPatch(
(w*2/3, h*0.0),
(w*2/3, h*1.0),
edgecolor='black',
facecolor='red',
arrowstyle=mpl.patches.ArrowStyle.Simple(head_length=10, head_width=10, tail_width=1)
))
plt.savefig(
'main.svg',
format='svg',
bbox_inches='tight',
dpi=100,
)
产生:
这是浏览器缩放箭头的屏幕截图,显示箭头未触及上方的黑线:
如何让他们在没有空白的情况下准确地触摸
在matplotlib上测试==3.2.2
相关问题:
- 边的跟踪始终是圆角的,因此箭头不再是尖的,而是以较大的线宽圆角
和Simple
有不同的绘制算法:用于CurveFilledAB
的算法使箭头超出目标,而Simple
使其处于运行状态CurveFilledAB
- 上面的线宽太宽了,以至于它隐藏了红色的内部颜色
shrinkA=0
和shrinkB=0
这是箭头不接触的第一个主要直接原因
这些值默认为2
,可能是因为箭头最初主要用于需要一些空间的注释中
如果我将它们设置为零:
FancyArrowPatch(
shrinkA=0,
shrinkB=0,
然后箭头接触,如所示:
A代表箭头的起点,B代表箭头的终点
线宽的影响
但是,要记住的另一件事是,线宽
也会影响箭头是否触及某个对象
例如,如果我在原始代码中添加了一个夸张的linewidth=10
:
FancyArrowPatch(
shrinkA=0,
shrinkB=0,
linewidth=10,
结果是:
因此,我们注意到:
Simple
,如果不需要不同的边框颜色,可以使用linewidth=0
返回尖箭头,并使用tail\u width
控制主箭头的线宽
这不适用于CurveFilledAB
但是:该样式的绘图算法是将边框单独用于主箭头线,因此我不确定如何在不获得圆角的情况下单独控制双头箭头的主线宽度,除了画两个更难看的简单箭头外:似乎可以通过添加一个新的SimpleAB
类来修补
结果:
FancyArrowPatch(
shrinkA=0,
shrinkB=0,
linewidth=0,
是: