MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Q: Axes on top of graphics primitives?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg22974] Re: [mg22954] Re: [mg22908] Q: Axes on top of graphics primitives?
  • From: Hartmut Wolf <hwolf at debis.com>
  • Date: Sat, 8 Apr 2000 14:44:44 -0400 (EDT)
  • Organization: debis Systemhaus
  • References: <200004070654.CAA16476@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Preston Nichols schrieb:
> 
> At 02:04 AM 04/06/2000 -0400, Eckhard Hennig wrote:
> >In a list plot, I would like to mark a rectangular region around the axes
> >origin with a gray background. The following three lines basically do what I
> >want except that the axes are drawn *behind* the rectangle. Does anyone know
> >an approach that allows to draw the axes on top of the gray region?
> >
> >lp = ListPlot[{{0, 0}}, PlotRange -> {{-2, 2}, {-2, 2}}, AspectRatio -> 1]
> >region = Graphics[{GrayLevel[0.95], Rectangle[{-1, -1}, {1, 1}]}]
> >Show[lp, region]
> >
> >-- Eckhard
> 
> Try this; note the order of the arguments in Show:
> 
> Show[region, FullGraphics[lp]]
> 
> That, however, will use the AspectRatio (and other options) from region, so
> you may want:
> 
> Show[region, FullGraphics[lp], AspectRatio->1]
> 
> or (a bit wasteful and ungraceful):
> 
> Show[lp, region, FullGraphics[lp]]
> 
> which renders lp twice.
> 
> Further explanation follows:
> 
> Explicitly given graphics primitives (such as Rectangle, or Line, or Point,
> or ...) are always rendered on top of the axes and ticks (even if you put
> the primitives in a Prolog option).  The axes and ticks are generated from
> (usually default) values of the options Axes, Ticks, AxesOrigin, etc., not
> from graphics primitives.
> 
> To get around this, you must somehow translate the axes and ticks into
> explicit graphics primitives, and then Show them after any items you want
> "behind" them.  The simplest way to do this is to use FullGraphics.
> 
> Depending on what you ultimately want to do with these plots, you could
> construct a list of graphics primitives for the axes and tick "by hand",
> completely circumventing Mathematica's built-in routines for axes and ticks.
> 

Dear Preston,

just a little remark to add to your nice solution:

In[2]:=
p = ParametricPlot[{Cos[t], Sin[t]}, {t, 0, 2 Pi}, 
    PlotStyle -> {Thickness[0.02], Hue[5/6, 0.5, 1.]}, 
    PlotRange -> {{-2, 2}, {-2, 2}}, AspectRatio -> Automatic]

In[3]:= pseudop = ReplacePart[p, {}, 1]

In[4]:=
region = Graphics[{GrayLevel[0.95], Rectangle[{-1, -1}, {1, 1}]}]

In[5]:= Show[pseudop, region, FullGraphics[p]]

or to put it together

Show[ReplacePart[#1, {}, 1], ##2, FullGraphics[#1]] &[p, region]

might be a good compromise between function and economy.


Kind regards, Hartmut


  • Prev by Date: Re: Re: Mathematica 4
  • Next by Date: why so long?
  • Previous by thread: Re: Q: Axes on top of graphics primitives?
  • Next by thread: Parallel programming.