Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与标记大小无关的指向标记边缘的箭头_Python_Matplotlib_Plot - Fatal编程技术网

Python 与标记大小无关的指向标记边缘的箭头

Python 与标记大小无关的指向标记边缘的箭头,python,matplotlib,plot,Python,Matplotlib,Plot,这是朝着与相同的方向发展的 我想把一个箭头从一个分散点指向另一个分散点,这样箭头就位于标记边缘的旁边。如以下示例所示: 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='-|&g

这是朝着与相同的方向发展的

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

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()

在这里,我手动选择了
shrinkA
shrinkB
的值,以便箭头非常靠近目标散射点的边缘。但是,如果更改标记的大小,则必须更改这些值

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

我知道
s
是在p^2中测量的,其中p是一个印刷点。因此,标记的半径为
sqrt(s/pi)
。如果
shrinkA
shrinkB
在相同的印刷点上测量,我们可以只做
shrinkB=radius
,其中
radius
是标记的半径


对于s==300,这是有意义的,因为半径接近9.8。
FancyArrowPatch
shrinkA
/
shrinkB
参数应以点为单位。点也是线宽或标记大小的单位。对于散点图,大小参数
s
是标记大小的平方

因此,给定散点图的
size
s=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()

所以markersize是标记中最远的两个点之间的长度(在圆的情况下,是直径)?这对圆来说是正确的,是的。对于其他标记,例如,如果您使用
“$.$”
,则无法轻松确定。
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()