Non-linear axis [message #22085] |
Tue, 24 October 2000 00:00  |
Irene Dumkow
Messages: 5 Registered: October 2000
|
Junior Member |
|
|
I am trying to add axis to an image. This part works (using a contour
plot
for the axis and matching the image size and plot window). My problem
is that I would like to have one of the y-axis with a non-linear
scaling,
in this particular case it is basically y1*y1. I tried something with
reading in the tickvalues, calculating the new values and than using
YTICKNAMES, but IDL still does the y-scale linearly. Any hints,
pointers, etc would be more
than welcome.
Irene Dumkow
|
|
|
Re: Non-linear axis [message #22190 is a reply to message #22085] |
Wed, 25 October 2000 00:00   |
Craig Markwardt
Messages: 1869 Registered: November 1996
|
Senior Member |
|
|
Irene Dumkow <irene.dumkow@uni-essen.de> writes:
> Martin Schultz wrote:
>>
>> Craig Markwardt wrote:
>>>
>>>
>>> Pay no attention to Martin. :-) ...
>>
>> Oh Craig. Thanks for bringing me back on Earth ;-) Guess, I just got
>> carried away by the word non-linear axis ... You only need resampling
>> if you want to display an image which was sampled in linear "bins" on
>> a non-linear axis.
>>
>> Never mind,
>> Martin
>>
Hi Irene--
I guess I am a little more enlightened and a little more confused. At
first I thought you were trying to simply plot a single non-linear Y
axis, but now I see you want both kinds of axes, one on each side of
the plot.
In that case, it's not clear whether you want to keep the same sets of
tick-marks on both sides or not. If you do, then your solution is
probably the best. Basically you have to find out IDL's choice of
tickmarks (using YTICK_GET as you did) before you can proceed.
However, I think what you *really* want to do, is have two completely
independent axes on either side of the plot, and have IDL choose
"pleasant" tickmarks for each. In that case, you probably want to
tell PLOT not to make a righthand axis, and then draw one yourself.
How about this example:
x = findgen(10)
y = x*x
plot, x, y, ystyle=8+1, xmargin=[10,10], ytitle='Main'
axis, yaxis=1, yrange=[0,2], ystyle=1, ytitle='Alternate'
A little explanation might be in order.
* YSTYLE=8+1 ensures that IDL draws only one axis, with an exact range;
* XMARGIN tells IDL to leave more room on the right side for tick labels;
* YAXIS=1 tells IDL to make an axis on the right side, ticks facing left;
* YRANGE gives a new axis range;
* YSTYLE=1 enforces that exact range;
This will give you a set of evenly spaced, but completely independent,
tick marks on the left and right sides of the plot.
If you really want to make *unevenly* spaced ticks (non-linear as you
say), then you would do that in the AXIS call, specifying your desired
tick positions and labels. These you would have to calculate by
yourself, as I showed in my previous example posting.
Does this help?
Craig
--
------------------------------------------------------------ --------------
Craig B. Markwardt, Ph.D. EMAIL: craigmnet@cow.physics.wisc.edu
Astrophysics, IDL, Finance, Derivatives | Remove "net" for better response
------------------------------------------------------------ --------------
|
|
|
|
|
Re: Non-linear axis [message #22272 is a reply to message #22085] |
Thu, 26 October 2000 00:00  |
Irene Dumkow
Messages: 5 Registered: October 2000
|
Junior Member |
|
|
Craig Markwardt wrote:
>
> However, I think what you *really* want to do, is have two completely
> independent axes on either side of the plot, and have IDL choose
> "pleasant" tickmarks for each. In that case, you probably want to
> tell PLOT not to make a righthand axis, and then draw one yourself.
>
> How about this example:
>
> x = findgen(10)
> y = x*x
> plot, x, y, ystyle=8+1, xmargin=[10,10], ytitle='Main'
> axis, yaxis=1, yrange=[0,2], ystyle=1, ytitle='Alternate'
>
> A little explanation might be in order.
> * YSTYLE=8+1 ensures that IDL draws only one axis, with an exact range;
> * XMARGIN tells IDL to leave more room on the right side for tick labels;
> * YAXIS=1 tells IDL to make an axis on the right side, ticks facing left;
> * YRANGE gives a new axis range;
> * YSTYLE=1 enforces that exact range;
>
> This will give you a set of evenly spaced, but completely independent,
> tick marks on the left and right sides of the plot.
>
> If you really want to make *unevenly* spaced ticks (non-linear as you
> say), then you would do that in the AXIS call, specifying your desired
> tick positions and labels. These you would have to calculate by
> yourself, as I showed in my previous example posting.
>
> Does this help?
>
> Craig
>
Thanks, it does help. I really want to have unevenly spaced ticks on the
right side, but they are not independent from the left side, and that
was
part of my problem. Somebody from the newsgroup-shy people mailed me a
sample routine which does what I want to do. The basic idea is
determining
what tickvalues I want to have, calculating what value that would
correspond
to on left-side axis , using these tickpositions with YTICKV and
labeling the ticks via YTICKNAME.
Thanks for all the help!
Irene
|
|
|