Re: Axis in two scales

*To*: mathgroup at smc.vnet.net*Subject*: [mg92592] Re: Axis in two scales*From*: Szabolcs Horvát <szhorvat at gmail.com>*Date*: Tue, 7 Oct 2008 07:05:36 -0400 (EDT)*Organization*: University of Bergen*References*: <gcchas$s1q$1@smc.vnet.net>

Nacho wrote: > Hello everyone. > > I have a dataset in pairs (x,y) that I would like to plot. The main > problem is that the data set has interesting parts in the beginning > that I would like to view clearly. > > As an example, create the following table: > > t = Table[{x, If[x < .5, Sin[100*x], Sin[x]]}, {x, 0, 5, 0.001}]; > ListPlot[t] > > You have a very detailed sine in the beginnng and the rest is less > interesting. > > I would like to "split" the X axis in two, so the left half of the > plot covers x={0,0.5} and the second half x={0.5,5}] in the same plot > and with the right ticks. > > It is like a piecewise axis... is it possible? > You can use custom tick marks, take a look at Ticks and FrameTicks. Here's a way to do it: First we define a function to transform x coordinates: trafo = \[Piecewise] { {#, # <= 0.5}, {Rescale[#, {0.5, 5}, {0.5, 1}], # > 0.5} } & In our case this is just a piecewise linear rescaling. Then apply this function to x coordinates and to the tick positions that we wish to show: ListPlot[ {trafo[#1], #2} & @@@ t, Ticks -> {{trafo[#], #} & /@ Join[Range[0, 0.5, 0.1], Range[1, 5]], Automatic} ] The advantage of this approach is that it is easily generalized: we could have used trafo = #^(1/3) & for a fancy non-linear scaling, or just trafo = Log to mimic ListLogLinearPlot (better not try to put a tick mark at 0 in this case).