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 ] *) (* *************************************************************** *)