[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Two x axes per plot





Surendar Jeyadev wrote:

> David Fanning has a nice illustration of how to use a linear and
> a log 'y' axes in the same plot. I have a question that is related
> to this, but not quite the same. How does one have an upper and
> a lower x axes, where the lower one in linear and the upper one
> has *some selected* values of a function of x.
>
> The example that comes to mind is the typical Arrhenius plot of
> y = A*exp(-T0/T), where one plots ln(y) vs 1/T to show the
> exponential nature of the data. This can be accomplished with
>
> plot_oi, 1/T, y, ....
>
> Now, how does one plot an upper 'x' axis which gives the
> corresponding values of T at "convenient" values. Say, that
>
> 100 < T < 500
>
> so that the lower axis goes from 0.002 to 0.010. The upper
> axis should have tick marks and the values at, say, 100, 200,
> 300, 400 and 500. How does one position the tick marks? Is it
> at all possible?
>
> thanks
> sj
>
> --
>
> Surendar Jeyadev         jeyadev@wrc.xerox.com

I've not actually had to do this before, but I had a little play and I
think (and hope) that this is the right way, although I'm sure of the
experts will reply later to tell you how it should be done.

First plot the graph as you have been doing, but add the keyword
xstyle=5 to your plot call - this suppresses the xaxes from being drawn.

Then you want to draw the 1/T axis. To do this enter:

AXIS, axis=0

 --the xaxis=0 specifies the bottom xaxis. You can format this axis as
you like, check out the help on AXIS to find out more.

Then to draw the upper axis, which has different tick values -

AXIS, xaxis=1, xtickv=[ array], xticks= number

    the xticks keyword sets the number of tick INTERVALS, (so therefore
there are number+1 tick marks), to appear on the axes, while the array
that you input for the xtickv keyword is the specific labels that it
uses for the axis. You have to make sure that the size of the array is
n+1. The AXIS procedure simply uses the array to label each tick mark
and of course you can produce the array as a function of every tenth
element in your data set.
      If you wanted to label every tenth data point out of a data set of
100, i.e 11 ticks, then xticks=11 and for xtickv do this:

a=findgen(11)*10
xtickv = function(data[a])

I hope that one, what I have said works, and two this is what you wanted

        cheers,
                Phil Aldis