箭头指向标记边缘独立于标记大小

时间:2017-11-19 23:56:16

标签: python matplotlib plot

这与this question的方向相同。

我想将箭头从一个散点指向另一个散点,以便箭头位于标记的边缘旁边。如下例所示:

import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots()
ax.scatter([0,1],[0,1], s=300)
arrow = mpl.patches.FancyArrowPatch(posA=(0,0), posB=(1,1), arrowstyle='-|>', mutation_scale=20, shrinkA=7, shrinkB=7)
plt.show()

enter image description here

在这里,我手动选择shrinkAshrinkB的值,以使箭头位于离目标散点边缘非常近的位置。但是,如果我更改标记的大小,我将不得不更改这些值。

我的问题是:知道标记的大小(ax.scatter中的kwarg s),如何选择shrinkAshrinkB以使箭头靠近标记的边缘?

我知道s是在p ^ 2中测量的,其中p是一个印刷点。这样标记的半径为sqrt(s / pi)。如果shrinkAshrinkB在相同的印刷点上进行衡量,我们可以shrinkB=radius radius,其中Option是标记的半径。

对于s == 300,这是有意义的,因为半径接近9.8。

1 个答案:

答案 0 :(得分:1)

shrinkA的{​​{1}} / shrinkB个参数以点为单位期望他们的论点。点也是线宽或标记的单位。对于散点图,size参数FancyArrowPatch是markersize的平方。

因此,给定散点图的s sizes=size是通过取平方根并除以2来计算的(因为您希望将箭头缩小半径,不是直径)。

shrink

示例:

shrink = math.sqrt(size)/2.

enter image description here