# Annotating an Arrow with in a plot.

9 views (last 30 days)

Show older comments

### Accepted Answer

### More Answers (2)

Nirjhar Kumar
on 2 Apr 2019

Adapted marcus yoder code at https://in.mathworks.com/matlabcentral/answers/346297-how-to-draw-an-arrow-using-non-normalized-coordinates .

open a figure and Just pass the position of x data's to the below function

function obj = dataArrow2(xpos)

%This function will draw an arrow on the plot for the specified x data position .

%Eg:

% plot(0:0.001:10,sin(0:0.001:10))

% dataArrow2([3000 6000 9000])

handles=findall(0,'type','figure');

for fig_cnt= 1:1:length(handles)

figure(handles(fig_cnt,1))

ax=handles(fig_cnt,1);

% hLeg=findobj(handles(fig_cnt,1),'type','legend');

% set(hLeg,'visible','off')

axObjs=findobj(handles(1,1),'type','Axes');%axObjs = ax.Children;

dataObjs = axObjs.Children;

oldunits = get(axObjs, 'Units');

set(axObjs, 'Units', 'Inches');

axpos = axObjs.Position

set(ax, 'Units', oldunits);

oldunits = get(handles, 'Units');

set(handles, 'Units', 'Inches');

figpos= handles.Position

set(handles, 'Units', oldunits);

% set(hLeg,'visible','off')

%get axes drawing area in data units

ax_xlim = ax.CurrentAxes.XLim;

ax_ylim = ax.CurrentAxes.YLim;

ax_per_xdata = axpos(3) ./ diff(ax_xlim);

ax_per_ydata = axpos(4) ./ diff(ax_ylim);

for i=1:1:length(dataObjs)

Xdata = dataObjs(i).XData;

Ydata = dataObjs(i).YData;

%these are figure-relative

for j=1:1:length(xpos)

Xpixels = (Xdata([xpos(j) xpos(j)+1]) - ax_xlim(1)).* ax_per_xdata+axpos(1);

%if set(gca,'xdir','reverse') is used

%Xpixels = -(Xdata([pos pos+1]) - ax_xlim(1)).* ax_per_xdata+axpos(3)+axpos(1);

Ypixels = (Ydata([xpos(j) xpos(j)+1]) - ax_ylim(1)).* ax_per_ydata+axpos(2);

%if set(gca,'ydir','reverse') is used

%Ypixels = -(Ydata([pos pos+1]) - ax_ylim(1)).* ax_per_ydata+axpos(2)+axpos(4);

annotation('arrow', Xpixels/figpos(3), Ypixels/figpos(4));

end;

obj = 1;

end

end;

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!