How can I draw a line with arrow head between 2 data points in a plot
1.967 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Amit K
am 28 Okt. 2014
Kommentiert: Alejandro
am 15 Feb. 2024
Hi,
If there are 2 points in XY plane [x1, y1] and [x2, y2] then how can I draw a line with an arrowhead starting from [x1, y1] and ending at [x2, y2]. Basically, I want the plot to look like this:
[x1, y1]--------->[x2, y2]
Preferably, I like the arrow-line to bend (arc) towards the second point.
AK
0 Kommentare
Akzeptierte Antwort
Star Strider
am 29 Okt. 2014
Bearbeitet: MathWorks Support Team
am 17 Mär. 2021
p1 = [2 3]; % First Point
p2 = [9 8]; % Second Point
dp = p2-p1; % Difference
figure
quiver(p1(1),p1(2),dp(1),dp(2),0)
grid
axis([0 10 0 10])
text(p1(1),p1(2), sprintf('(%.0f,%.0f)',p1))
text(p2(1),p2(2), sprintf('(%.0f,%.0f)',p2))
The final zero in the quiver call turns off the automatic scaling.
The arc would be a bit more challenging, depending on what you intend by arc. I would just use the quiver result.
7 Kommentare
Star Strider
am 22 Nov. 2022
Verschoben: Dyuman Joshi
am 21 Dez. 2023
@Steven Lord — Thank you! (I was off doing other things for a few minutes.)
Weitere Antworten (4)
Sajeer Modavan
am 14 Mär. 2019
Bearbeitet: Sajeer Modavan
am 14 Mär. 2019
t = 1:0.1:10; wo = 1;
x = 2*exp(t*wo).*sin(t*wo);
plot(t,x),hold on
plot([6 6],[-1e5 1e5],'--k','Linewidth',1.4)
plot([8.7 8.7],[-1e5 1e5],'--k','Linewidth',1.4)
ylim([-0.3e5 1e4])
% One arrow from left to right with text on left side
x = [0.74 0.79]; % adjust length and location of arrow
y = [0.3 0.3]; % adjust hieght and width of arrow
annotation('textarrow',x,y,'String',' Growth ','FontSize',13,'Linewidth',2)
% Arrow with two head at both end and text between
y = [0.4 0.4];
Xadj = 1.35; % adjust location of left arrow starting point (the sum of this with 'x' should not be negative)
annotation('textarrow',x,y,'String',' Growth ','FontSize',13,'Linewidth',2)
annotation('textarrow',-x+Xadj,y,'String','','FontSize',14,'Linewidth',2)
% One arrow from left to right with text over it
x = [0.56 0.79]; % adjust length and location of arrow
y = [0.5 0.5];
annotation('textarrow',x,y,'FontSize',13,'Linewidth',2)
annotation('textbox',[.6 .3 .7 .27],'EdgeColor','none','String','Growth','FontSize',13,'Linewidth',2)
1 Kommentar
Marius Hammer
am 26 Apr. 2019
Could you give an describtion of how the arrow coordinates are set exactly? x and y need to be between 0 and 1 within annotation, so if I want the arrow to go from e.g. (x1,y1) = (3,0.5) and (x2,y2) = (6,0.5) how is x and y adjusted for exact location?
Image Analyst
am 29 Okt. 2014
The "Official solution" from the folks at the Mathworks: http://www.mathworks.com/matlabcentral/answers/92988-how-do-i-plot-a-line-that-has-an-arrow-on-the-end-of-it-in-2-d-and-3-d
I use arrow3 from the File Exchange.
0 Kommentare
Vitaly Fedoseev
am 26 Mai 2021
Bearbeitet: Vitaly Fedoseev
am 26 Mai 2021
The following code (Matlab R2019a) draws an arrow in the plot coordinates from point P1 to point P2. Zoom in/out shifts position of the arrow:
P1=[10,-1]; %from point
P2=[70,2]; % to point
figure;
Xlim=[-1 110];
Ylim=[-2 3];
Pos = [0.10 0.55 0.85 0.4];
subplot('Position', Pos)
hold on
X_conv(1)=Pos(1)+(Pos(3))/(Xlim(2)-Xlim(1))*(P1(1)-Xlim(1));
X_conv(2)=Pos(1)+(Pos(3))/(Xlim(2)-Xlim(1))*(P2(1)-Xlim(1));
Y_conv(1)=Pos(2)+(Pos(4))/(Ylim(2)-Ylim(1))*(P1(2)-Ylim(1));
Y_conv(2)=Pos(2)+(Pos(4))/(Ylim(2)-Ylim(1))*(P2(2)-Ylim(1));
x=0:0.1:100;plot(x, sin(x));plot([-100 1000], P2(2)*[1 1]); plot(P2(1)*[1 1], [-100 100]);
plot(x, sin(x));plot([-100 1000], P1(2)*[1 1]); plot(P1(1)*[1 1], [-100 100])
xlim(Xlim)
ylim(Ylim)
annotation('arrow', X_conv, Y_conv)
1 Kommentar
Siehe auch
Kategorien
Mehr zu 2-D and 3-D Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!