Skip to content Skip to sidebar Skip to footer

Arrow Pointing To Edge Of Marker Independently From Markers Size

This is goes in the same direction as this question. I want to point an arrow from one scatter point to another, so that the arrow head lies next to edge of the marker. Like in the

Solution 1:

The shrinkA/shrinkB arguments of FancyArrowPatch expect their argument in units of points. Points is also the unit of linewidth or markersize. For a scatter plot, the size argument s is the square of the markersize.

So given the size of the scatter plot, s=size, the shrink is calculated by taking the squareroot and dividing by 2 (because you want to shrink the arrow by the radius, not the diameter).

shrink = math.sqrt(size)/2.

Example:

import matplotlib.pyplotas 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

Post a Comment for "Arrow Pointing To Edge Of Marker Independently From Markers Size"