File Exchange

image thumbnail

Arrow3 Version 5

version 1.15 (430 KB) by

Draws lines with directional arrowheads.

27 Ratings



View License

Editor's Note: This file was selected as MATLAB Central Pick of the Week

ARROW3(P1,P2) draws lines from P1 to P2 with directional arrowheads. P1 and P2 are either nx2 or nx3 matrices. Each row of P1 is an initial point, and each row of P2 is a terminal point.

ARROW3(P1,P2,S,W,H,IP,ALPHA,BETA) can be used to specify properties of the line, initial point marker, and arrowhead. Type "help arrow3" at the command prompt for more information

What's new in Version 5:

All arrowhead and initial point marker sizes (W, H, and IP) are relative to the PlotBox diagonal.

Version 5 attempts to preserve the appearance of existing axes. In particular, ARROW3 will not change XYZLim, View, or CameraViewAngle. ARROW3 does not, however, support stretch-to-fill scaling. If a particular aspect ratio or variable limit is required, use DASPECT, PBASPECT, AXIS, or XYZLIM commands before calling ARROW3. Users are encouraged to report problems directly to the author.

Comments and Ratings (45)

yong geng

You're so nice guy~

Thank you Tom

Tom Davis

Tom Davis (view profile)

Hello, Ikem --

Extract the files to a folder, e.g. C:\arrow3.

Then in the MATLAB Command Window:

cd C:\arrow3
help arrow3

Ikem Solomon

Please how do I install it. I am having problems attaching it to my matlab

Tom Davis

Tom Davis (view profile)

Hello, John --

This works for me:

load durer
axis image
hold on
arrow3([235 215],[130 465],'r-2.5',1.5)
hold off

Arrow head not showing if plotted over an image?

Thank you Tom!

Liya Wang

Hello Tom,

Sorry I make a mistake.I mixes up lon and lat.I can draw arrows on worldmap now.You can ignore my question earlier.Thank u very much!

Best wishes.


Liya Wang

Hello Tom,
Thank you for your answer.When I draw 2D arrows,which plotting functions in your code make it work? I just find plot3.Could you please tell me all plotting functions you used in your code .

Tom Davis

Tom Davis (view profile)

Hello, Liya --

I have neither the Mapping Toolbox nor a recent version of MATLAB. If you can ask specific questions, I may be able to help.

Good luck and best wishes.

-- Tom

Liya Wang

hello Tom,I want to ask you a question.When I use the function worldmap and draw arrows on it,I try to modify your code,but I can't.Could you please modify your code so that it can be used on the worldmap.Thank u so much!


Le (view profile)

Thanks a lot! The function is very useful

Adam Danz

Adam Danz (view profile)

Nice, saved me from a lot of footwork.

tao song

I love this .m file.

Andreas J.

sorry i didn't want to submit the last voting. I didn't read the "relative to the PlotBox diagonal" at the time i was about to write a critic, but as i reread the description i closed the tab.

But i still think that this is an annoying feature, i would like it more if i could choose wether it should be relative or a fix size. I also don't like that it clears the axes. I know a workaround but it's still annoying me everytime i have to use arrow3. Just my opinion.

Andreas J.

Daniel Frisch

yang yang

Thanks for your arrow3 program.


Ben (view profile)

Great code. Have been using it for quite a long time.


Ben (view profile)


Tom Davis

Tom Davis (view profile)

Hi, Jonas --

Please try version 5.15. Thanks.

-- Tom


Jonas (view profile)

I've downloaded arrow3 sometime in 2002 for the first time; great job, guys!

In order to avoid possible conflicts with other code writing to the 'UserData' property, I suggest replacing these calls by "setappdata(ax,'arrow3',value)"


Ji?í (view profile)

It does not ignore zero magnitue input (R2012a).

>> arrow3([1 1],[1 1])
Error using arrow3 (line 373)
P1 cannot equal P2

Jeonghyun Seo

Xilu Wang



Daniel (view profile)

Hi Tom,

thanks for that nice contribution. I would enjoy if you could modify the input arguments with string propertys (similar to most of the inbuilt-functions (f.e. 'LineWidth', 2)), in particular to add a 'Parent' property to get rid of the problems with multiple axes!


Tom Davis

Tom Davis (view profile)

Hello, Tomazc --

Please try this and write if you have questions. Thanks.

% Animation Example
t=(0:pi/40:8*pi)'; u=cos(t); v=sin(t);
grid on, view(35,25)
hold on
p=[20*t,u,v]; inc=4:1:length(t);
p2=p(inc,:); p1=p(inc-1,:);
for i=2:1:length(p1)
hold off


solo (view profile)


Tomazc (view profile)

I'd like to use arrow3 in animation (for function) where only one arrow will be shown, so i cannot use 'hold on'.
In this case the 'axis' are not working, but i need the same view.

Any suggestion?

axis([-400 400 -400 400 -100 700])
whitebg([1 1 1]);
view(35, 25)
grid on

for i = 1:1:15

Does what it's supposed to do, and the help files are VERY detailed. Thank you very much! :)

Tom Davis

Tom Davis (view profile)

Instead of using Copy Figure from the Edit menu, use Save As from the File menu, save the figure as a PNG file, and then insert the PNG file into Word.

Lei Shang

Very useful with 3D plots. But when I'm copying figures to word, all the nice arrows plotted by 'arrow3.m' disappeared. And my command window displays:

Warning: RGB CData not yet supported in Painter's mode
> In graphics\private\restorehg at 100
  In graphics\private\restore at 29
  In print at 277
  In editmenufcn at 78

How do I fix this?

Lei Shang

Tom Davis

Tom Davis (view profile)

Wide lines may obscure the arrowhead tip, but the line endpoint and arrowhead tip are _always_ coincident.

On my matlab (R2007a) the line of the arrow is visible after the tip of the arrowhead in 2D plots. It looks like as if the arrowhead is plotted at the wrong position.
In my example arrow3 is called after some calls of "line()" and "rectangle()". I can supply further information if required.

Tom Davis

Tom Davis (view profile)

It is not necessary to set AXIS EQUAL, but commands that may change the aspect ratio should be issued _before_ calling ARROW3. ARROW3 draws surfaces that look like right circular cones and spheres no matter the aspect ratio, but the ratio must be fixed, and changing the ratio will distort the surfaces.

There are many examples in the HTML files that illustrate how to use ARROW3 before and after PLOT, POLAR, CONTOUR, PLOT3, SURF, SLICE, and PATCH.

piao lin

it seems if I want to plot another plot3(......) with arrow3(.....)

I should

hold on;
axis equal ; %you'd better use axis equal

if I put plot3(....) before arrow3(.....) ,just like below ,I get not see the result of arrow3(.....);

hold on;
axis equal ; %you'd better use axis equal

I am doing a project in layup optimization of balanced symmetric laminates, and I wanted to display at each call to fmincon the material direction for my laminate, I was able to so by using arrow3, thank you.

Vaibhav Deshpande.

Georg Stillfried

works fine

dong ding

it's excellent.I can use it to draw my picture. thanks!

Ahmet Sacan

I was happily using arrow.m until I came to see that it for some reason did not draw anything when my m file was deployed (i.e., running executable that resulted from mcc). I came back to File Exchange for a different arrower instead of trying to debug arrow.m. Now I'm using arrow3 which works fine in deployed mode. thanks.

maricel miguel

I havent tried it but looks good from the screen shot, what was the thought process on this one, and how long did it took you



use appdata instead of userdata


use appdata instead of userdata


corrected DOCTYPE


improved html appearance in File Exchange viewer


updated html files and added animation example


updated html files and added animation example


corrected spelling errors

updated contact information

zero magnitude bug fix

changed screenshot

added cone plot option

ignore zero-magnitude input

new screenshot

revised html files

modified named colors to match Simulink colors

modified named colors to match default ColorOrder

added example references; check for empty input

added example references; check for empty input

simplified example 10

corrected example 2

more examples

more examples

magnitude coloring and documentation revision

dialog revision

added dialog

added dialog

improved code metrics

MATLAB Release
MATLAB 6.5 (R13)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video