       Re: How to make 2D axis with arrows?

• To: mathgroup at smc.vnet.net
• Subject: [mg28946] Re: How to make 2D axis with arrows?
• From: drnews at NOSPAM--Scientificarts.com (David Reiss)
• Date: Sat, 19 May 2001 22:28:05 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```In article <9e024m\$2v6 at smc.vnet.net>, Jose Capco
<jcapco at mathematik.uni-ulm.de> wrote:

> Dear NG,
>
> I wish to know how one may able to plot a function, with arrows in the axis.
> Should I try the trick by the Graphics`Arrows` or is there some other way?
> (Also, how can I know what fonts are can/cannot be used .. is there any font
> list in Mathematica? I wish to try different fonts for AxesLabel and
>
> Sincerely,
> Jose Capco

The following is something I did for someone as a quick
consulting project once.  Consider it as presented for
free under the GNU public license...  Enjoy.

Function definition: ToArrowAxes

The following, when executed will load the Graphics`Arrow` package and create
the complete definition for the ToArrowAxes function

ClearAll[ToArrowAxes];

Needs["Graphics`Arrow`"];

Options[ToArrowAxes]=Options[Arrow];

ToArrowAxes::usage=
"ToArrowAxes[graphic] takes the two-dimensional graphic given by \
\"graphic\" and places arrows at the ends of the axes. If the original \
graphic does not have axes then ToArrowAxes creates them. \n\n\
ToArrowAxes[graphic, fraction] makes the length of the arrows add to the \
length of the axes by the fraction \"fraction\" of graphic's original \
size.The default value of \"fraction\" is 1/20. \n\nToArrowAxes[graphic, \
fraction, opts] and ToArrowAxes[graphic, opts] pass the Arrow options to the \
arrows.";

ToArrowAxes::whoops=
"The first argument to ToArrowAxes must be a two-dimensional graphic with \

ToArrowAxes[pl_,(frac:(_?NumberQ):1/20),opts___?OptionQ]/;

Module[{x0,y0,xi,xf,yi,yf,xdelta,ydelta,xiarrow,xfarrow,yiarrow,yfarrow,
prim,gopts},

{{xi,xf},{yi,yf}}=PlotRange/.AbsoluteOptions[pl,PlotRange];
{x0,y0}=AxesOrigin/.AbsoluteOptions[pl,AxesOrigin];

xdelta=(xf-xi)frac;
ydelta=(yf-yi)frac;;

xiarrow=Arrow[{xi,y0}, {xi-xdelta,y0},opts];
xfarrow=Arrow[{xf,y0}, {xf+xdelta,y0},opts];
yiarrow=Arrow[{x0,yi}, {x0,yi-ydelta},opts];
yfarrow=Arrow[{x0,yf}, {x0,yf+ydelta},opts];

Show[
Graphics[{xiarrow,xfarrow,yiarrow,yfarrow},
PlotRange\[Rule]{{xi-xdelta,xf+xdelta},{yi-ydelta,yf+ydelta}}],
FullGraphics[
pl/.Graphics[prim:{___},gopts_]:>
Graphics[prim,Axes\[Rule]True,gopts]],
DisplayFunction\[Rule]\$DisplayFunction]
];

Examples of use: ToArrowAxes

pl1 = Plot[x\^2\ Sin[x], {x, \(-2\), 4}, PlotRange \[Rule] All];
ToArrowAxes[pl1];
ToArrowAxes[pl1,1/4];