MathGroup Archive 2008

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

Search the Archive

Re: Advanced plotting

I have to admit that this was a bit of work because I never tried to make a 
plot with an x-axis break before, but this can be done with the 
Presentations package. I plot BesselJ[5,x] and x^2 on the same plot with the 
y scale on the left going from -0.4 to 0.4 and on the right going from 0 to 
2500. The scale on the right was produced with CustomTicks. The x^2 function 
and scale are shown in Red. The functions are shown in the domain [0,10] and 
[40,50] with a break, using a dashed line and "//" in the middle.

Since we can't have several partial scales on an axis with Mathematica, I 
used two XTickLines from Presentations to produce the x scales from 0 to 10 
and 40 to 50. This whole process might be automated if we were going to do a 
lot of it. We have to do a  y scaling transformation on the x^2 function in 
both its plotting and in the CustomTicks. We have to do x domain shifting 
for both functions in the separated domain [40,50]. The x-axis and its 
labeling are essentially hand crafter.


yrightticks =
  CustomTicks[-.4 + .00032 # &, {0, 5200, 500, 5},
   CTNumberFunction -> (Style[#, Red] &)];
 {Draw[BesselJ[5, x], {x, 0, 10}],
  Draw[BesselJ[5, x + 25], {x, 15, 25}],
  Draw[-0.4` + 0.00032` x^2, {x, 0, 10}],
  Draw[-0.4` + 0.00032` (x + 25)^2, {x, 15, 25}],
  (* Draw the x axis in two pieces *)
  {AbsoluteDashing[{4}], Line[{{10, -.4}, {25, -.4}}]},
  Text[Style["//", 12, Bold], {12.5, -.4}],
  XTickLine[{0, 10, -.4}, {0, 10}, {0, 10, 5}, 5,
   XLabTickSpecs -> {0.02, 0}, XUnLabTickSpecs -> {.01, 0}],
  XTickLine[{15, 25, -.4}, {40, 50}, {40, 50, 5}, 5,
   XLabTickSpecs -> {0.02, 0}, XUnLabTickSpecs -> {.01, 0}],
  Text["x" // TraditionalForm, {12.5, -.45}]},
 AspectRatio -> .6,
 Frame -> {False, True, False, True},
 FrameTicks -> {None, Automatic, None, yrightticks},
 FrameLabel -> {None, BesselJ[5, x], None, x^2},
 RotateLabel -> False,
 PlotRange -> {{0, 25}, {-.40, .40}},
 PlotRangePadding -> 0,
 PlotRangeClipping -> False,
 ImagePadding -> {{60, 50}, {30, 10}},
 PlotLabel -> "Two Scale Plot with x Axis Break",
 BaseStyle -> {FontSize -> 12},
 ImageSize -> 500]

David Park
djmpark at

<kazik.lakomy at> wrote in message news:gal3jl$e1b$1 at
> Hi,
> I am wondering is there a possibility in Mathematica 6 to use two
> different scales on vertical axis- one scale on the left one and the
> other on the right one (with a horizontal axis being common for both
> the vertical ones). The thing is I would like to plot two functions
> that have the same "x-domain" but completely different "y-domain". If
> I used the standard plotting procedure then if a first function (with
> values about 100) can be easily seen on the plot, the values of the
> other are to small (close to zero) to be seen. The solution would be
> to set two independent Y axes, however I don't know if there is the
> possibility in Mathematica 6 (I have seen such a plots in scientific
> papers but maybe done with some other application).
> The second question is is there a possibility to make breaks in axes.
> What I mean is that I have a plot with let say X domain [0,50], but I
> am only interested in two parts of it, say [0,10] and [40,50], so is
> it possible to set a kind of an option in Plot command? Such a "trick"
> is also quite common in scientific papers with characteristic "\\" on
> axis in a place where the "break" is made (I know for example how to
> do it in Origin and there is quite an easy task).
> I have been searching for the staff quite long and haven't found any
> solution yet so I would be really grateful if someone would help me
> with the issue.
> Best regards,
> Kazik

  • Prev by Date: Re: asumming and Exp orthogonality condition
  • Next by Date: Re: Functional programming?
  • Previous by thread: Re: Advanced plotting
  • Next by thread: Spline`Spline and GraphicsComplex