Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2001
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2001

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

Search the Archive

Re: Multiple scales for Y axis of plot?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg31110] Re: [mg31094] Multiple scales for Y axis of plot?
  • From: BobHanlon at aol.com
  • Date: Wed, 10 Oct 2001 03:43:24 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

In a message dated 2001/10/9 3:01:33 AM, crcarle at sandia.gov writes:

>I have a typical multi-expression plot like this:
>
>Plot[ {f1, f2}, {x,a,b}, PlotStyle->{RGBColor[1,0,0], RGBColor[0,0,1]}
>].
>
>On the Y axis, I want to have a different scale for each of the two
>functions.  How can I generate another scaled Y axis adjacent to the
>default one, or in general acheive this sort of thing?  I anticipate a
>lengthy process of building up all the graphics primitives, but before
>I
>figure all that out, I'm wondering if there is a reasonably easy way.
>

This makes use of AbsoluteOptions so I believe it requires version 4 or later.

Needs["Graphics`Colors`"];

twoAxesPlot[{leftPlot_, rightPlot_}, 
      {var_Symbol, varMin_?NumericQ, varMax_?NumericQ}, 
      opts___] := 
    Module[{lftPlt, rghtPlt, conv, 
        lftTicks, rghtTicks, tcks, 
        y, y1, y2, y3, y4}, 
      lftPlt = Plot[leftPlot, 
          {var, varMin, varMax}, 
          DisplayFunction -> Identity, opts];
      lftTicks = 
        (Ticks /. AbsoluteOptions[lftPlt])[[2]];
      tcks = First /@ lftTicks;
      y1 = Min[tcks];
      y2 = Max[tcks];
      rghtPlt = Plot[rightPlot, 
          {var, varMin, varMax}, 
          DisplayFunction -> Identity, opts];
      rghtTicks = 
        (Ticks /. AbsoluteOptions[rghtPlt])[[2]];
      tcks = First /@ rghtTicks;
      y3 = Min[tcks];
      y4 = Max[tcks];
      rghtTicks = (rghtTicks /. 
            {y_?NumericQ, z__} :> {conv[y], z});
      conv[y_] := (y-y3)*(y2-y1)/(y4-y3) + y1;
      Plot[{leftPlot, conv[rightPlot]}, 
        {var, varMin, varMax}, 
        Frame -> True, Axes -> False, 
        PlotStyle -> {Blue, Red}, 
        FrameStyle -> {{}, {Blue}, {}, {Red}}, 
        FrameTicks -> 
          {Automatic, lftTicks, None, rghtTicks}, 
        PlotRange -> 
          {y1-0.02(y2-y1), y2+0.02(y2-y1)}, 
        DisplayFunction -> $DisplayFunction, 
        opts]
      ];

twoAxesPlot[{x, Exp[x]}, {x, 0, 10}];


Bob Hanlon
Chantilly, VA  USA


  • Prev by Date: RE: Multiple scales for Y axis of plot?
  • Next by Date: Re: Multiple scales for Y axis of plot?
  • Previous by thread: RE: Multiple scales for Y axis of plot?
  • Next by thread: Re: Multiple scales for Y axis of plot?