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

Home » Public Forums » archive » Re: Explain Contour Plot to Me
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
Re: Explain Contour Plot to Me [message #77509] Fri, 09 September 2011 14:45 Go to next message
David Fanning is currently offline  David Fanning
Messages: 11724
Registered: August 2001
Senior Member
Michael Galloy writes:

> I had to expand the 4 colors into a full 256 color table with 257
> contour levels to make the color bar display correctly.

I hope somebody comes up with something better than this. I
can barely get access to the keyboard, Coyote is so anxious to
write the web page article that explains this to people!

He tells me the title of the article is going to be
"Function Graphics: Super Convenient!" :-(

Cheers,

David


--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
Re: Explain Contour Plot to Me [message #77510 is a reply to message #77509] Fri, 09 September 2011 14:30 Go to previous messageGo to next message
David Fanning is currently offline  David Fanning
Messages: 11724
Registered: August 2001
Senior Member
Michael Galloy writes:

> I had to expand the 4 colors into a full 256 color table with 257
> contour levels to make the color bar display correctly.

Well, that sort of boggles the mind, but OK, maybe
that's how you do it. Unfortunately, it begs the
question of how you are now going to overlay the
contour lines themselves on this filled contour
plot. This, of course, is what I really wanted,
although my previous example was reduced to the
basics just to get the colors right.

Any ideas there? Maybe invert the levels and
multiple by 1000. Something like that!?

Cheers,

David


--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
Re: Explain Contour Plot to Me [message #77511 is a reply to message #77510] Fri, 09 September 2011 13:49 Go to previous messageGo to next message
Michael Galloy is currently offline  Michael Galloy
Messages: 1114
Registered: April 2006
Senior Member
On 9/9/11 2:34 PM, Michael Galloy wrote:
> On 9/9/11 1:39 PM, David Fanning wrote:
>> Folks,
>>
>> OK, forget labeling the color bar. I can live without
>> that.
>>
>> I would consider the week a triumph if someone could just
>> explain to me, like I was a 10 year old child, how to
>> use the IDL 8.1 contour function to produce a contour
>> plot with four colors of my choosing. The colors will
>> be used like this:
>>
>> Data between 0.00 and 0.25 should be red.
>> Data between 0.25 and 0.50 should be blue.
>> Data between 0.50 and 0.75 should be green.
>> Data between 0.75 and 1.00 should be yellow.
>>
>> Here is the program I am trying to run, using some
>> ideas from Mark Piper's program from yesterday.
>> You see two different ways of trying to get the
>> Colorbar() colors right. One of which actually
>> works. But neither of the Contour() plots have
>> the right colors. The Coyote Graphics plot at the
>> end is what I am trying to achieve.
>>
>> PRO ContourTest
>>
>> ; Create a simple, random dataset for contouring:
>> data = RANDOMU(-3L, 9, 9)
>> LoadCT, 0
>> TVLCT, 255, 0, 0, 0
>> TVLCT, 0, 0, 255, 1
>> TVLCT, 0, 255, 0, 2
>> TVLCT, 255, 255, 0, 3
>> TVLCT, rr, gg, bb, /GET
>>
>> rgb = Transpose([[rr[0:3]],[gg[0:3]],[bb[0:3]]])
>> Help, rgb
>> rgb = Congrid(rgb, 3, 256)
>>
>> levels =[0.0, 0.25, 0.5, 0.75]
>>
>> ; Contour function try 1.
>> w1 = Window(DIMENSIONS=[500, 400])
>> ctr=contour(data, /CURRENT, C_VALUE=levels, $
>> POSITION=[0.1, 0.1, 0.9, 0.8], /FILL, $
>> RGB_TABLE=rgb, $
>> AXIS_STYLE=2)
>> names = String(levels,FORMAT='(F0.2)')
>>
>> cb = Colorbar(TARGET=ctr, $
>> POSITION=[0.1, 0.85, 0.9, 0.9])
>>
>> rgb = Transpose([[rr[0:3]],[gg[0:3]],[bb[0:3]]])
>> Help, rgb
>>
>> ; Contour function try 2.
>> w2 = Window(DIMENSIONS=[500, 400])
>> ctr=contour(data, /CURRENT, C_VALUE=levels, $
>> POSITION=[0.1, 0.1, 0.9, 0.8], /FILL, $
>> RGB_TABLE=rgb, RGB_INDICES=Indgen(4), $
>> AXIS_STYLE=2)
>> names = String(levels,FORMAT='(F0.2)')
>>
>> cb = Colorbar(TARGET=ctr, $
>> POSITION=[0.1, 0.85, 0.9, 0.9])
>>
>> ; Coyote graphics.
>> cgWindow, WXSize=500, WYSize=400
>> cgContour, data, LEVELS=levels, C_COLORS=Indgen(4), $
>> POSITION=[0.1, 0.1, 0.9, 0.8], /FILL, /ADDCMD
>> cgColorBar, NCOLORS=4, RANGE=[0,1], FORMAT='(F0.2)', $
>> DIVISIONS=4, /FIT, /ADDCMD
>> END
>>
>> If you can get this to me before Nadal beats Roddick,
>> you will get bonus credit, which can be used to ask
>> function graphics questions at some time in the future. ;-)
>>
>> Cheers,
>>
>> David
>
> I had to expand the 4 colors into a full 256 color table with 257
> contour levels to make the color bar display correctly.
>
> There are definite oddities in how things have to be given to CONTOUR
> and COLORBAR. For example, I can get the correct contour colors with a 4
> color color table, but the color bar then displays as the 4 colors
> followed by the rest of the grey scale. Also, I have to give CONTOUR the
> RGB_INDICES vector, even though from the docs it looks like I'm just
> giving it the default value.
>
> Anyway, this works for me, I hope this doesn't crash your computer.
>
>
> pro contourtest
> compile_opt strictarr
>
> ; create a simple, random dataset for contouring
> data = randomu(-3l, 9, 9)
>
> loadct, 0
> tvlct, 255, 0, 0, 0
> tvlct, 0, 0, 255, 1
> tvlct, 0, 255, 0, 2
> tvlct, 255, 255, 0, 3
> tvlct, rgb, /get
>
> rgb = congrid(rgb[0:3, *], 256, 3)
> levels = findgen(257) / 256.
>
> w = window(dimensions=[500, 400])
> ctr = contour(data, /current, c_value=levels, $
> position=[0.1, 0.1, 0.9, 0.8], /fill, $
> rgb_table=rgb, rgb_indices=indgen(256), $
> axis_style=2)
>
> cb = colorbar(target=ctr, position=[0.1, 0.85, 0.9, 0.9])
> end
>

Another oddity is what happens when I try to resize this graphic.

Mike
--
Michael Galloy
www.michaelgalloy.com
Modern IDL, A Guide to Learning IDL: http://modernidl.idldev.com
Research Mathematician
Tech-X Corporation
Re: Explain Contour Plot to Me [message #77512 is a reply to message #77511] Fri, 09 September 2011 13:34 Go to previous messageGo to next message
Michael Galloy is currently offline  Michael Galloy
Messages: 1114
Registered: April 2006
Senior Member
On 9/9/11 1:39 PM, David Fanning wrote:
> Folks,
>
> OK, forget labeling the color bar. I can live without
> that.
>
> I would consider the week a triumph if someone could just
> explain to me, like I was a 10 year old child, how to
> use the IDL 8.1 contour function to produce a contour
> plot with four colors of my choosing. The colors will
> be used like this:
>
> Data between 0.00 and 0.25 should be red.
> Data between 0.25 and 0.50 should be blue.
> Data between 0.50 and 0.75 should be green.
> Data between 0.75 and 1.00 should be yellow.
>
> Here is the program I am trying to run, using some
> ideas from Mark Piper's program from yesterday.
> You see two different ways of trying to get the
> Colorbar() colors right. One of which actually
> works. But neither of the Contour() plots have
> the right colors. The Coyote Graphics plot at the
> end is what I am trying to achieve.
>
> PRO ContourTest
>
> ; Create a simple, random dataset for contouring:
> data = RANDOMU(-3L, 9, 9)
> LoadCT, 0
> TVLCT, 255, 0, 0, 0
> TVLCT, 0, 0, 255, 1
> TVLCT, 0, 255, 0, 2
> TVLCT, 255, 255, 0, 3
> TVLCT, rr, gg, bb, /GET
>
> rgb = Transpose([[rr[0:3]],[gg[0:3]],[bb[0:3]]])
> Help, rgb
> rgb = Congrid(rgb, 3, 256)
>
> levels =[0.0, 0.25, 0.5, 0.75]
>
> ; Contour function try 1.
> w1 = Window(DIMENSIONS=[500, 400])
> ctr=contour(data, /CURRENT, C_VALUE=levels, $
> POSITION=[0.1, 0.1, 0.9, 0.8], /FILL, $
> RGB_TABLE=rgb, $
> AXIS_STYLE=2)
> names = String(levels,FORMAT='(F0.2)')
>
> cb = Colorbar(TARGET=ctr, $
> POSITION=[0.1, 0.85, 0.9, 0.9])
>
> rgb = Transpose([[rr[0:3]],[gg[0:3]],[bb[0:3]]])
> Help, rgb
>
> ; Contour function try 2.
> w2 = Window(DIMENSIONS=[500, 400])
> ctr=contour(data, /CURRENT, C_VALUE=levels, $
> POSITION=[0.1, 0.1, 0.9, 0.8], /FILL, $
> RGB_TABLE=rgb, RGB_INDICES=Indgen(4), $
> AXIS_STYLE=2)
> names = String(levels,FORMAT='(F0.2)')
>
> cb = Colorbar(TARGET=ctr, $
> POSITION=[0.1, 0.85, 0.9, 0.9])
>
> ; Coyote graphics.
> cgWindow, WXSize=500, WYSize=400
> cgContour, data, LEVELS=levels, C_COLORS=Indgen(4), $
> POSITION=[0.1, 0.1, 0.9, 0.8], /FILL, /ADDCMD
> cgColorBar, NCOLORS=4, RANGE=[0,1], FORMAT='(F0.2)', $
> DIVISIONS=4, /FIT, /ADDCMD
> END
>
> If you can get this to me before Nadal beats Roddick,
> you will get bonus credit, which can be used to ask
> function graphics questions at some time in the future. ;-)
>
> Cheers,
>
> David

I had to expand the 4 colors into a full 256 color table with 257
contour levels to make the color bar display correctly.

There are definite oddities in how things have to be given to CONTOUR
and COLORBAR. For example, I can get the correct contour colors with a 4
color color table, but the color bar then displays as the 4 colors
followed by the rest of the grey scale. Also, I have to give CONTOUR the
RGB_INDICES vector, even though from the docs it looks like I'm just
giving it the default value.

Anyway, this works for me, I hope this doesn't crash your computer.


pro contourtest
compile_opt strictarr

; create a simple, random dataset for contouring
data = randomu(-3l, 9, 9)

loadct, 0
tvlct, 255, 0, 0, 0
tvlct, 0, 0, 255, 1
tvlct, 0, 255, 0, 2
tvlct, 255, 255, 0, 3
tvlct, rgb, /get

rgb = congrid(rgb[0:3, *], 256, 3)
levels = findgen(257) / 256.

w = window(dimensions=[500, 400])
ctr = contour(data, /current, c_value=levels, $
position=[0.1, 0.1, 0.9, 0.8], /fill, $
rgb_table=rgb, rgb_indices=indgen(256), $
axis_style=2)

cb = colorbar(target=ctr, position=[0.1, 0.85, 0.9, 0.9])
end

--
Michael Galloy
www.michaelgalloy.com
Modern IDL, A Guide to Learning IDL: http://modernidl.idldev.com
Research Mathematician
Tech-X Corporation
Re: Explain Contour Plot to Me [message #77608 is a reply to message #77510] Fri, 09 September 2011 16:50 Go to previous message
David Fanning is currently offline  David Fanning
Messages: 11724
Registered: August 2001
Senior Member
David Fanning writes:

>> I had to expand the 4 colors into a full 256 color table with 257
>> contour levels to make the color bar display correctly.
>
> Well, that sort of boggles the mind, but OK, maybe
> that's how you do it. Unfortunately, it begs the
> question of how you are now going to overlay the
> contour lines themselves on this filled contour
> plot. This, of course, is what I really wanted,
> although my previous example was reduced to the
> basics just to get the colors right.

OK, we are making a little progress here. But there
are still a couple of problems. The color bar insists
on querying the data to get its range. The range apparently
cannot be set, so the labels on the color bar are wrong
and don't correspond to the contour levels. Can anyone
think of a way to fix these? (I could, of course, force
the contour labels to be what I want them to be, but
aside from this feeling like cheating, I can't do it
because the TICKNAME keyword will crash my machine.)

Also, I cannot seem to set a character size for the plot
independently of the character size for the contour labels.
Does anyone know how to do this? In this case, I would like
the contour plot to have the same size annotation as the
color bar, with the inside contour labels appearing smaller.

Note that the C_USE_LABEL_ORIENTATION keyword seems to
keep the contour labels right side up, rather than the
jumbled, upside down default values. That's the good
news. The bad news is that is a long keyword to have to
type for every contour plot you want to create!

Here is the code so far.

;-------------------------------------------------------
PRO ContourTest

; Create a simple, random dataset for contouring:
data = RANDOMU(-3L, 9, 9)
LoadCT, 0
TVLCT, 255, 0, 0, 0
TVLCT, 0, 0, 255, 1
TVLCT, 0, 255, 0, 2
TVLCT, 255, 255, 0, 3

levels =[0.25, 0.5, 0.75, 1.00]

; Contour function.
tvlct, rgb, /get
rgb = congrid(rgb[0:3, *], 256, 3)
clevels = findgen(257) / 256.

w = window(dimensions=[500, 400])
ctr = contour(data, /current, c_value=clevels, $
position=[0.1, 0.1, 0.9, 0.8], /fill, $
rgb_table=rgb, rgb_indices=indgen(256), $
axis_style=2, font_size=10)
ctrOver = contour(data, /current, c_value=levels, $
color=cgColor('charcoal', /row, /triple), $
/overplot, c_label_show=Replicate(1, 4), $
c_use_label_orientation=1, font_size=7)
cb = colorbar(target=ctr, $
position=[0.1, 0.90, 0.9, 0.95], $
major=5, border_on=1, font_size=10)

; Can we force the font size to be larger? Apparently, not. :-(
ctr.font_size=10

; Coyote graphics.
levels =[0.0, 0.25, 0.5, 0.75]

cgWindow, WXSize=500, WYSize=400
cgContour, data, LEVELS=levels, C_COLORS=Indgen(4), $
POSITION=[0.1, 0.1, 0.9, 0.8], /FILL, /ADDCMD
cgContour, data, LEVELS=levels, C_COLOR='charcoal', LABEL=1, $
C_CHARSIZE=1.0, /OVERPLOT, /ADDCMD
cgColorBar, NCOLORS=4, RANGE=[0,1], FORMAT='(F0.2)', $
DIVISIONS=4, /FIT, /ADDCMD, MINOR=5, XTICKLEN=1.0
END
;-------------------------------------------------------

And here is a little lagniappe (small gift). A program
to clean up any and all graphics windows on your display.

;-------------------------------------------------------
PRO CleanUp

; Function graphics windows.
w = GetWindows()
FOR j=0,N_Elements(w)-1 DO (w[j]).close

; Widget windows or Coyote Graphics windows.
Widget_Control, /Reset

; IDL direct graphics windows.
WHILE !D.Window GT -1 DO WDelete, !D.Window

END
;-------------------------------------------------------

Cheers,

David
--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: Total and Utter Confusion!
Next Topic: Startup City 2011 (September 24th,Mumbai)

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

Current Time: Fri Oct 10 08:15:12 PDT 2025

Total time taken to generate the page: 1.35780 seconds