How do you make a line with an arrow halfway between 2 points?

4 visualizzazioni (ultimi 30 giorni)
i'm looking for something like. [p1] ------>-----[p2]

Risposte (1)

jonas
jonas il 10 Lug 2018
Modificato: jonas il 10 Lug 2018
Let's say you want an arrow from between [X1 X2],[Y1 Y2]. We use annotation but specify the arrow coordinates by the axes coordinates (instead of the default figure coordinates)
x=0:.05:2*pi;
y=sin(x);
h=plot(x,y)
X=[0 4]; %[X1 X2]
Y=[0.5 -0.5]; %[Y1 Y2]
Pos=get(gca,'position');
xlimits=get(gca,'xlim');
xmin=xlimits(1);
xmax=xlimits(2);
AxesRangeX=diff(xlimits)
FigPosX=Pos(1)+(X-xmin)*(Pos(3)/AxesRangeX)
ylimits=get(gca,'ylim');
ymin=ylimits(1);
ymax=ylimits(2);
AxesRangeY=diff(ylimits)
FigPosY=Pos(2)+(Y-ymin)*(Pos(4)/AxesRangeY)
dX=diff(FigPosX);
dY=diff(FigPosY);
annotation('arrow',FigPosX,FigPosY,'headstyle','none')
annotation('arrow',FigPosX-[0 dX./2],FigPosY-[0 dY./2])
  2 Commenti
Kulan Sinclair
Kulan Sinclair il 10 Lug 2018
the problem with annotate is it ignores the bounds of the figure and doesn't operate with the same units as the rest of the figure(or plots contained within it) it's easy enough to scale a number so it is a ratio between 0 and 1 but wen 0 is some indeterminate distance outside the plot and 1 is also outside the plot. scaling it to fit within the bounds of a plot when i don't know how large the plot is going to be relative to the size of the figure is difficult. i'm thinking quiver is going to be my best option but i was hoping to a different linestyle for a normal plot.
jonas
jonas il 10 Lug 2018
Modificato: jonas il 10 Lug 2018
I've updated the code. You can now plot the arrow by specifying values in reference to the axes.

Accedi per commentare.

Prodotti


Release

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by