MathGroup Archive 1992

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

Search the Archive

Re: rescalling(sp)

  • To: mathgroup <mathgroup at yoda.physics.unc.edu>
  • Subject: Re: rescalling(sp)
  • From: HAY at leicester.ac.uk
  • Date: Sat, 7 NOV 92 21:27:52 GMT

Jack Lee writes in reply to Sherman C. Reed (reed at ee.uta.edu)

> I've written a function called ShowScaled, which behaves essentially the
> same as Show, except that it accepts an additional argument, Scale -> n,
> which specifies that the plot is to be scaled so that the entire plot area
> is n units by n units (i.e. one unit on either axis corresponds to exactly
> 1/n of the total width of the graph).  The default is Scale -> 10.

The following code extends his idea and meets at least one of his needs --
independent scaling of x- and y- coordinates. Unlike Jack's it does not make use
of Epilog -- perhaps someone could check on whether anything is lost by this
change.

I have tried to make the behaviour as close as posible to that of Show.
So that , for example Prolog and Epilog and Label are passed on (in Jacks
version FullGraphics did not do this).
The user's options can override those in the given graphics object.
More controlcould be given over the original graphics but too keep things simple
I have adopted the aim of taking this as it is and just scaling and positioning
it.

============================================================================

ShowScaled2::usage = 
"ShowScaled[graphics, options, xScale -> xn, yScale ->yn] displays a
2-dimensional graphics object, scaled so that one x-unit occupies exactly
1/xn of the total width of the graph and one y-unit occupies exactly
1/yn of the total width of the graph (Defaults for xn, yn are 10)  
It accepts the same options as Show.";


ShowScaled2[args__, opts___Rule] :=
	Module[{plot,center,scales},
  
(* find the scale to be used, Default = 10*)
 scales = 
    {xScale, yScale}/. {opts, xScale->10, yScale->10};  
  
(* Create a graphics object using all the user's Graphics options *);
  
   plot = Show[ args , DisplayFunction -> Identity];

(* Pull out the PlotRange that was actually plotted*)
     
   pltrnge = FullOptions[plot,PlotRange][[{1,2}]]; 
  
(*Find the center of plot *)
  
   center = Plus@@Transpose[pltrnge]/2 ;
  
(* AA: Turn the graphics object into a list of graphics primitives
   to retain the axes and ticks etc at the final display
   Prolog, Epilog, PlotLabel are lost here *)
            
   gr = FullGraphics[ plot]/.{l__, Text[]} -> {l};

(* Finally, display the scaled plot. *)
   
   Show[ gr,
      PlotRange -> 
         center + Outer[Times, scales,{-1, 1}/2],
         
      Sequence@@DeleteCases[{opts}, (xScale|yScale)->_ ],
               			
      AspectRatio -> Automatic,
      Axes -> False,
      DisplayFunction -> $DisplayFunction,
        
(* restore any  Prolog, Epilog, PlotLabel options lost by 
   FullGraphics at AA above *)
      Sequence@@
         Cases[
            Options[plot], 
            Literal[PlotLabel|Prolog|Epilog ->_] 
(* these changed, and might be set by an option *)
         ]
      ]
 ];                 


Allan Hayes
hay at leicester.ac.uk





  • Prev by Date: Re: PS Problems
  • Next by Date: Re: PostScript Problems
  • Previous by thread: Re: rescalling(sp)
  • Next by thread: Re: PostScript savings of graphics images