Re: Scale Transformations
- To: mathgroup at yoda.physics.unc.edu
- Subject: Re: Scale Transformations
- From: matteo at cns.nyu.edu (Matteo Carandini)
- Date: Sat, 11 Jun 94 12:09:18 EDT
Jean Peccoud writes:
> Does anybody know a package to modify the scales of 2D graphics. I would
> like to apply with other functions a transformation similar to the Log
> transformation in a LogLog or semiLog plot. My particular interest is in
> gaussian plots.
I have been using the following hack for a while, and it works fine.
The nice thing about it is that you can build a Graphics object however you
like (with Plot, ListPlot, Graphics, whatever), and only at the end play with
the axes. Changing the axis scale of a graph is usually a snap on
even the most pathetic piece of software, but not with Mma.
I find it useful because often I want to see the same graphs on
Linear and Log scales, and my graphs contain many functions, data points,
and error bars. So I find this little hack much more useful than most of
Graphics.m (WRI, are you there?). You can use it to warp the axes with
any transormation. I am too lazy to have it adjust the labels and the ticks,
so there is plenty of room for improvement. Hope this helps,
-Matteo
*
Matteo Carandini
Center for Neural Science
New York University
6 Washington Place, #809
New York NY 10003
(212) 998 7898 (voice)
(212) 995 4011 (fax)
matteo at cns.nyu.edu
*
P.S.
I think that Mma is a GREAT environment to do science (and education),
so I am surprised at how bad it is at generating simple,
publication-quality graphs. For example, in my last posting I showed how
making a nice Bode plot is a headache. I received many letters of people
asking to post a solution. I don't have a solution! ask WRI.
(* ********************* super hack to warp the axes *********************** *)
(* ********************* (does not deserve a package) <********************** *)
<<Utilities/FilterOptions.m
Options[ WarpShow ]:= { XWarp->Identity, YWarp->Identity }
WarpShow[ graphics_Graphics, opts___ ]:=
Block[
{ xwarp = XWarp /. {opts} /. Options[WarpShow],
ywarp = YWarp /. {opts} /. Options[WarpShow] },
Show[
MapAt[
( # /. { {x_?NumberQ,y_?NumberQ}->N[{xwarp[x],ywarp[y]}] } )&,
graphics,
1
],
FilterOptions[ Graphics, opts ]
]
]
(* example:
mygraph = Plot[ x^2/(0.25+x^2), {x,0,1} ]
WarpShow[ mygraph ]
WarpShow[ mygraph, XWarp->Log ]
WarpShow[ mygraph, XWarp->(Log[2,#]&), YWarp->(Log[10,#]&) ]
bizarrewarp[ x_ ]:= Exp[ x^2 ]
WarpShow[ mygraph, XWarp->bizarrewarp, PlotRange->All ]
*)
(* *************************************************************** *)