gpt4 book ai didi

python - 箭头指向标记边缘,与标记大小无关

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:45 24 4
gpt4 key购买 nike

这与 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

这里我手动选择了 shr​​inkAshr​​inkB 的值,以便箭头距离目标散点的边缘非常近。但是,如果我更改标记的大小,我就必须更改这些值。

我的问题是:知道标记的大小(ax.scatter中的kwarg s),如何选择shr​​inkAshr​​inkB箭头离标记边缘很近吗?

我知道 s 是以 p^2 为单位测量的,其中 p 是打印点。因此标记的半径为 sqrt(s/pi)。如果 shr​​inkAshr​​inkB 在相同的打印点上测量,我们可以执行 shr​​inkB=radius 其中 radius 是标记的半径。

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

最佳答案

FancyArrowPatchshr​​inkA/shr​​inkB 参数期望其参数以点为单位。点也是线宽或标记大小的单位。对于散点图,大小参数 s 是标记大小的平方。

因此,给定散点图的大小s=size收缩的计算方法是取平方根并除以 2 (因为您想按半径缩小箭头,而不是直径)。

shrink = math.sqrt(size)/2.

示例:

import matplotlib.pyplot as plt
import matplotlib as mpl
import math

fig, ax = plt.subplots()
size = 1000
radius = math.sqrt(size)/2.
points = ax.scatter([0,1], [0,1], s=size)
arrow = mpl.patches.FancyArrowPatch(posA=(0,0), posB=(1,1),
arrowstyle='-|>', mutation_scale=20,
shrinkA=radius, shrinkB=radius)
ax.add_patch(arrow)

plt.show()

enter image description here

关于python - 箭头指向标记边缘,与标记大小无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com