comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Plotting a horizontal line over a cgImage
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Plotting a horizontal line over a cgImage [message #93582] Mon, 29 August 2016 09:03 Go to next message
Christina Haig is currently offline  Christina Haig
Messages: 4
Registered: August 2016
Junior Member
This question probably has a very specific audience, but anyone who might be able to help me I would greatly appreciate.

Here is a good example of a cgimage plot, somewhat complex, but nothing untoward:

p = pos[*,0]
cgimage,data1,/DEVICE,/SCALE,/AXES,position=[p[0],p[1],p[2], p[3]],$
xrange=[mint,maxt],yrange=[minp,maxp],charsize=3,$
AXKEYWORDS={xtickformat:'(A1)',ylog:1,yticks:2,$
ytickname:['10!e0','10!e1','10!e2']},/noerase

As you can see, the yrange goes roughly from 1 to 100ish. I would like to plot a horizontal line at 2 that references the axes set in the cgimage command, and at the position of the same (there are 12 total plots in my output). Now oplot obviously does not allow the position command. So I attempted to cleverly use the cgplot command to overplot the line.

cgplot,[mint,maxt],[2.0,2.0],thick=4,line=5,color=255,$
position=[p[0],p[1],p[2],p[3]],/overplot

However nothing shows up in my plot. Can anyone advise me how I might solve this problem?

Thanks,
Christina
Re: Plotting a horizontal line over a cgImage [message #93583 is a reply to message #93582] Mon, 29 August 2016 11:20 Go to previous messageGo to next message
wlandsman is currently offline  wlandsman
Messages: 743
Registered: June 2000
Senior Member
On Monday, August 29, 2016 at 12:03:11 PM UTC-4, Christina Haig wrote:

> As you can see, the yrange goes roughly from 1 to 100ish.

Actually we can't see ;-) We (the readers of this newsgroup) don't know the content of your variables, and we can't see the output plot.

But your code looks like it should work. Does the CGPLOT command come immediately after the CGIMAGE command or is there something in between that could reset the positioning?

Also I would set COLOR='green' (or something similar) in your CGPLOT command, in case there is something funky with the color table.

Also check the coordinate transformation between data and device coordinates

IDL> print,convert_coord(mint,maxt],[2.0,2.0],/data,/to_device)

to make sure the line is in the physical area of the window. --Wayne
Re: Plotting a horizontal line over a cgImage [message #93584 is a reply to message #93582] Mon, 29 August 2016 11:20 Go to previous messageGo to next message
Christina Haig is currently offline  Christina Haig
Messages: 4
Registered: August 2016
Junior Member
One edit to say I changed to:

cgplot,[mint,maxt],[2.0,2.0],thick=4,line=5,color=255,$
position=[p[0],p[1],p[2],p[3]],/ylog,/overplot

However, still nothing.
Re: Plotting a horizontal line over a cgImage [message #93585 is a reply to message #93583] Mon, 29 August 2016 12:29 Go to previous messageGo to next message
Christina Haig is currently offline  Christina Haig
Messages: 4
Registered: August 2016
Junior Member
On Monday, August 29, 2016 at 2:20:04 PM UTC-4, wlandsman wrote:
> On Monday, August 29, 2016 at 12:03:11 PM UTC-4, Christina Haig wrote:
>
>> As you can see, the yrange goes roughly from 1 to 100ish.
>
> Actually we can't see ;-) We (the readers of this newsgroup) don't know the content of your variables, and we can't see the output plot.
>
> But your code looks like it should work. Does the CGPLOT command come immediately after the CGIMAGE command or is there something in between that could reset the positioning?
>
> Also I would set COLOR='green' (or something similar) in your CGPLOT command, in case there is something funky with the color table.
>
> Also check the coordinate transformation between data and device coordinates
>
> IDL> print,convert_coord(mint,maxt],[2.0,2.0],/data,/to_device)
>
> to make sure the line is in the physical area of the window. --Wayne

Hi Wayne, thanks for your reply. I decided to try your suggestion of 'green', and also 'black', just in case. Also, my color table goes from black to white (255 to 0), and I tried both of those.

I also tried the convert_coord command, but /to_device gives some weirdly large numbers that I don't quite understand. I then tried convert_coord with /to_normal and got:

0.088541664 0.95833331 0.0000000
0.35069446 0.95833331 0.0000000

This looks like it should be somewhere in the plot area, in the general region of the upper-lefthand-corner where the underlying plot is. There is nothing between the cgplot and cgimage command. Is there something about either cgplot or cgimage that doesn't like one writing over the other perhaps? Is there a way to override this?
Re: Plotting a horizontal line over a cgImage [message #93588 is a reply to message #93585] Tue, 30 August 2016 06:59 Go to previous messageGo to next message
wlandsman is currently offline  wlandsman
Messages: 743
Registered: June 2000
Senior Member
I had tested your code by putting in fake data below and I see the horizontal line at y=2. --Wayne


cgimage,dist(512),/DEVICE,/SCALE,/AXES,position=[0.2,0.2,0.9 ,0.9],$
xrange=[1,10],yrange=[1,100],charsize=3,$
AXKEYWORDS={xtickformat:'(A1)',ylog:1,yticks:2,$
ytickname:['10!e0','10!e1','10!e2']},/noerase


cgplot,[1,10],[2.0,2.0],thick=4,line=5,color='green',$
position=[0.2,0.2,0.9,0.9],/overplot
Re: Plotting a horizontal line over a cgImage [message #93654 is a reply to message #93582] Thu, 22 September 2016 14:08 Go to previous messageGo to next message
Jeremy Bailin is currently offline  Jeremy Bailin
Messages: 618
Registered: April 2008
Senior Member
On Monday, August 29, 2016 at 11:03:11 AM UTC-5, Christina Haig wrote:
> This question probably has a very specific audience, but anyone who might be able to help me I would greatly appreciate.
>
> Here is a good example of a cgimage plot, somewhat complex, but nothing untoward:
>
> p = pos[*,0]
> cgimage,data1,/DEVICE,/SCALE,/AXES,position=[p[0],p[1],p[2], p[3]],$
> xrange=[mint,maxt],yrange=[minp,maxp],charsize=3,$
> AXKEYWORDS={xtickformat:'(A1)',ylog:1,yticks:2,$
> ytickname:['10!e0','10!e1','10!e2']},/noerase
>
> As you can see, the yrange goes roughly from 1 to 100ish. I would like to plot a horizontal line at 2 that references the axes set in the cgimage command, and at the position of the same (there are 12 total plots in my output). Now oplot obviously does not allow the position command. So I attempted to cleverly use the cgplot command to overplot the line.
>
> cgplot,[mint,maxt],[2.0,2.0],thick=4,line=5,color=255,$
> position=[p[0],p[1],p[2],p[3]],/overplot
>
> However nothing shows up in my plot. Can anyone advise me how I might solve this problem?
>
> Thanks,
> Christina

Are minp and maxp what you think they are?

-Jeremy.
Re: Plotting a horizontal line over a cgImage [message #93659 is a reply to message #93654] Fri, 23 September 2016 12:04 Go to previous message
Christina Haig is currently offline  Christina Haig
Messages: 4
Registered: August 2016
Junior Member
On Thursday, September 22, 2016 at 5:08:47 PM UTC-4, Jeremy Bailin wrote:
> On Monday, August 29, 2016 at 11:03:11 AM UTC-5, Christina Haig wrote:
>> This question probably has a very specific audience, but anyone who might be able to help me I would greatly appreciate.
>>
>> Here is a good example of a cgimage plot, somewhat complex, but nothing untoward:
>>
>> p = pos[*,0]
>> cgimage,data1,/DEVICE,/SCALE,/AXES,position=[p[0],p[1],p[2], p[3]],$
>> xrange=[mint,maxt],yrange=[minp,maxp],charsize=3,$
>> AXKEYWORDS={xtickformat:'(A1)',ylog:1,yticks:2,$
>> ytickname:['10!e0','10!e1','10!e2']},/noerase
>>
>> As you can see, the yrange goes roughly from 1 to 100ish. I would like to plot a horizontal line at 2 that references the axes set in the cgimage command, and at the position of the same (there are 12 total plots in my output). Now oplot obviously does not allow the position command. So I attempted to cleverly use the cgplot command to overplot the line.
>>
>> cgplot,[mint,maxt],[2.0,2.0],thick=4,line=5,color=255,$
>> position=[p[0],p[1],p[2],p[3]],/overplot
>>
>> However nothing shows up in my plot. Can anyone advise me how I might solve this problem?
>>
>> Thanks,
>> Christina
>
> Are minp and maxp what you think they are?
>
> -Jeremy.

Apologies for the delay in replying. This was in fact the problem. The problem was my data was already logarithmic, and thus my axes were 0 - 2.0. My fault for not remembering that /ylog just changes the tick names of the axes on cgplot, but the min and max has to be already logged.

So what I needed was to put in log(2.0), instead of just 2.0. I'll leave this thread up in case other people have trouble with logarithmic cgplot.
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Need e-book of Image Analysis, Classification and Change Detection in Remote Sensing: With Algorithms for ENVI/IDL and Python by Mort Canty
Next Topic: Convert MJD date range to number of days elapsed in IDL

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 13:39:29 PDT 2025

Total time taken to generate the page: 0.00742 seconds