Note
Go to the end to download the full example code.
2D Arrow Widget#
A draggable arrow overlay on a 2-D image panel. The tail sits at (x, y)
and the head at (x + u, y + v) in data coordinates. Drag the body to move
the whole arrow; drag the head handle to re-aim it (updating u / v).
Add it with add_arrow_widget().
import numpy as np
import anyplotlib as apl
rng = np.random.default_rng(3)
data = rng.standard_normal((128, 128)).cumsum(0).cumsum(1)
data = (data - data.min()) / (data.max() - data.min())
xy = np.linspace(0, 10, 128)
fig, ax = apl.subplots(1, 1, figsize=(460, 460))
v = ax.imshow(data, axes=[xy, xy], units="nm")
arrow = v.add_arrow_widget(x=2.0, y=2.0, u=5.0, v=4.0,
color="#ff1744", linewidth=2)
fig
React to drags#
Register a pointer_move handler to read the live geometry while the arrow
is dragged or re-aimed (there is no on_changed method — the event system
is the API). Read arrow.x/y/u/v inside the handler.
Total running time of the script: (0 minutes 1.461 seconds)