Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
icwg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Andi Walther
icwg
Commits
b18eb50f
Commit
b18eb50f
authored
6 years ago
by
Andi Walther
Browse files
Options
Downloads
Patches
Plain Diff
ll
parent
71913140
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
colorbar.pro
+0
-418
0 additions, 418 deletions
colorbar.pro
with
0 additions
and
418 deletions
colorbar.pro
deleted
100644 → 0
+
0
−
418
View file @
71913140
;
+
;
NAME
:
;
COLORBAR
;
;
PURPOSE
:
;
;
The
purpose
of
this
routine
is
to
add
a
color
bar
to
the
current
;
graphics
window
.
;
;
AUTHOR
:
;
;
FANNING
SOFTWARE
CONSULTING
;
David
Fanning
,
Ph
.
D
.
;
1645
Sheely
Drive
;
Fort
Collins
,
CO
80526
USA
;
Phone
:
970
-
221
-
0438
;
E
-
mail
:
davidf
@
dfanning
.
com
;
Coyote
's Guide to IDL Programming: http://www.dfanning.com/
;
; CATEGORY:
;
; Graphics, Widgets.
;
; CALLING SEQUENCE:
;
; COLORBAR
;
; INPUTS:
;
; None.
;
; KEYWORD PARAMETERS:
;
; BOTTOM: The lowest color index of the colors to be loaded in
; the bar.
;
; CHARSIZE: The character size of the color bar annotations. Default is 1.0.
;
; COLOR: The color index of the bar outline and characters. Default
; is !P.Color..
;
; DIVISIONS: The number of divisions to divide the bar into. There will
; be (divisions + 1) annotations. The default is 6.
;
; FONT: Sets the font of the annotation. Hershey: -1, Hardware:0, True-Type: 1.
;
; FORMAT: The format of the bar annotations. Default is '
(
I5
)
'.
;
; INVERTCOLORS: Setting this keyword inverts the colors in the color bar.
;
; MAXRANGE: The maximum data value for the bar annotation. Default is
; NCOLORS.
;
; MINRANGE: The minimum data value for the bar annotation. Default is 0.
;
; MINOR: The number of minor tick divisions. Default is 2.
;
; NCOLORS: This is the number of colors in the color bar.
;
; POSITION: A four-element array of normalized coordinates in the same
; form as the POSITION keyword on a plot. Default is
; [0.88, 0.10, 0.95, 0.90] for a vertical bar and
; [0.10, 0.88, 0.90, 0.95] for a horizontal bar.
;;
; RANGE: A two-element vector of the form [min, max]. Provides an
; alternative way of setting the MINRANGE and MAXRANGE keywords.
;
; RIGHT: This puts the labels on the right-hand side of a vertical
; color bar. It applies only to vertical color bars.
;
; TICKNAMES: A string array of names or values for the tick marks.
;
; TITLE: This is title for the color bar. The default is to have
; no title.
;
; TOP: This puts the labels on top of the bar rather than under it.
; The keyword only applies if a horizontal color bar is rendered.
;
; VERTICAL: Setting this keyword give a vertical color bar. The default
; is a horizontal color bar.
;
; COMMON BLOCKS:
;
; None.
;
; SIDE EFFECTS:
;
; Color bar is drawn in the current graphics window.
;
; RESTRICTIONS:
;
; The number of colors available on the display device (not the
; PostScript device) is used unless the NCOLORS keyword is used.
;
; EXAMPLE:
;
; To display a horizontal color bar above a contour plot, type:
;
; LOADCT, 5, NCOLORS=100
; CONTOUR, DIST(31,41), POSITION=[0.15, 0.15, 0.95, 0.75], $
; C_COLORS=INDGEN(25)*4, NLEVELS=25
; COLORBAR, NCOLORS=100, POSITION=[0.15, 0.85, 0.95, 0.90]
;
; MODIFICATION HISTORY:
;
; Written by: David W. Fanning, 10 JUNE 96.
; 10/27/96: Added the ability to send output to PostScript. DWF
; 11/4/96: Substantially rewritten to go to screen or PostScript
; file without having to know much about the PostScript device
; or even what the current graphics device is. DWF
; 1/27/97: Added the RIGHT and TOP keywords. Also modified the
; way the TITLE keyword works. DWF
; 7/15/97: Fixed a problem some machines have with plots that have
; no valid data range in them. DWF
; 12/5/98: Fixed a problem in how the colorbar image is created that
; seemed to tickle a bug in some versions of IDL. DWF.
; 1/12/99: Fixed a problem caused by RSI fixing a bug in IDL 5.2. Sigh... DWF.
; 3/30/99: Modified a few of the defaults. DWF.
; 3/30/99: Used NORMAL rather than DEVICE coords for positioning bar. DWF.
; 3/30/99: Added the RANGE keyword. DWF.
; 3/30/99: Added FONT keyword. DWF
; 5/6/99: Many modifications to defaults. DWF.
; 5/6/99: Removed PSCOLOR keyword. DWF.
; 5/6/99: Improved error handling on position coordinates. DWF.
; 5/6/99. Added MINOR keyword. DWF.
; 5/6/99: Set Device, Decomposed=0 if necessary. DWF.
; 2/9/99: Fixed a problem caused by setting BOTTOM keyword, but not NCOLORS. DWF.
; 8/17/99. Fixed a problem with ambiguous MIN and MINOR keywords. DWF
; 8/25/99. I think I *finally* got the BOTTOM/NCOLORS thing sorted out. :-( DWF.
; 10/10/99. Modified the program so that current plot and map coordinates are
; saved and restored after the colorbar is drawn. DWF.
; 3/18/00. Moved a block of code to prevent a problem with color decomposition. DWF.
; 4/28/00. Made !P.Font default value for FONT keyword. DWF.
; 9/26/00. Made the code more general for scalable pixel devices. DWF.
; 1/16/01. Added INVERTCOLORS keyword. DWF.
; 5/11/04. Added TICKNAME keyword. DWF.
;-
;
;###########################################################################
;
; LICENSE
;
; This software is OSI Certified Open Source Software.
; OSI Certified is a certification mark of the Open Source Initiative.
;
; Copyright © 2000-2004 Fanning Software Consulting.
;
; This software is provided "as-is", without any express or
; implied warranty. In no event will the authors be held liable
; for any damages arising from the use of this software.
;
; Permission is granted to anyone to use this software for any
; purpose, including commercial applications, and to alter it and
; redistribute it freely, subject to the following restrictions:
;
; 1. The origin of this software must not be misrepresented; you must
; not claim you wrote the original software. If you use this software
; in a product, an acknowledgment in the product documentation
; would be appreciated, but is not required.
;
; 2. Altered source versions must be plainly marked as such, and must
; not be misrepresented as being the original software.
;
; 3. This notice may not be removed or altered from any source distribution.
;
; For more information on Open Source Software, visit the Open Source
; web site: http://www.opensource.org.
;
;###########################################################################
PRO colorbar, BOTTOM=bottom, CHARSIZE=charsize, COLOR=color, DIVISIONS=divisions, $
FORMAT=format, POSITION=position, MAXRANGE=maxrange, MINRANGE=minrange, NCOLORS=ncolors, $
TITLE=title, VERTICAL=vertical, TOP=top, RIGHT=right, MINOR=minor, $
RANGE=range, FONT=font, TICKLEN=ticklen, _EXTRA=extra, INVERTCOLORS=invertcolors, $
TICKNAMES=ticknames, bw_to_color = bw_to_color_keywords
; Return to caller on error.
On_Error, 2
; Save the current plot state.
bang_p = !P
bang_x = !X
bang_Y = !Y
bang_Z = !Z
bang_Map = !Map
; Are scalable pixels available on the device?
IF (!D.Flags AND 1) NE 0 THEN scalablePixels = 1 ELSE scalablePixels = 0
; Which release of IDL is this?
thisRelease = Float(!Version.Release)
; Check and define keywords.
IF N_ELEMENTS(ncolors) EQ 0 THEN BEGIN
; Most display devices to not use the 256 colors available to
; the PostScript device. This presents a problem when writing
; general-purpose programs that can be output to the display or
; to the PostScript device. This problem is especially bothersome
; if you don't
specify
the
number
of
colors
you
are
using
in
the
;
program
.
One
way
to
work
around
this
problem
is
to
make
the
;
default
number
of
colors
the
same
for
the
display
device
and
for
;
the
PostScript
device
.
Then
,
the
colors
you
see
in
PostScript
are
;
identical
to
the
colors
you
see
on
your
display
.
Here
is
one
way
to
;
do
it
.
IF
scalablePixels
THEN
BEGIN
oldDevice
=
!
D
.
NAME
;
What
kind
of
computer
are
we
using
?
SET_PLOT
to
appropriate
;
display
device
.
thisOS
=
!
VERSION
.
OS_FAMILY
thisOS
=
STRMID
(
thisOS
,
0
,
3
)
thisOS
=
STRUPCASE
(
thisOS
)
CASE
thisOS
of
'MAC'
:
SET_PLOT
,
thisOS
'WIN'
:
SET_PLOT
,
thisOS
ELSE
:
SET_PLOT
,
'X'
ENDCASE
;
Here
is
how
many
colors
we
should
use
.
ncolors
=
!
D
.
TABLE_SIZE
SET_PLOT
,
oldDevice
ENDIF
ELSE
ncolors
=
!
D
.
TABLE_SIZE
ENDIF
IF
N_ELEMENTS
(
bottom
)
EQ
0
THEN
bottom
=
0
B
IF
N_ELEMENTS
(
charsize
)
EQ
0
THEN
charsize
=
1.0
IF
N_ELEMENTS
(
format
)
EQ
0
THEN
format
=
'(I5)'
IF
N_ELEMENTS
(
color
)
EQ
0
THEN
color
=
!
P
.
Color
IF
N_ELEMENTS
(
minrange
)
EQ
0
THEN
minrange
=
0
IF
N_ELEMENTS
(
maxrange
)
EQ
0
THEN
maxrange
=
ncolors
IF
N_ELEMENTS
(
ticklen
)
EQ
0
THEN
ticklen
=
0.2
IF
N_ELEMENTS
(
minor
)
EQ
0
THEN
minor
=
2
IF
N_ELEMENTS
(
range
)
NE
0
THEN
BEGIN
minrange
=
range
[
0
]
maxrange
=
range
[
1
]
ENDIF
IF
N_ELEMENTS
(
divisions
)
EQ
0
THEN
divisions
=
6
IF
N_ELEMENTS
(
font
)
EQ
0
THEN
font
=
!
P
.
Font
IF
N_ELEMENTS
(
title
)
EQ
0
THEN
title
=
''
;
You
can't have a format set *and* use ticknames.
IF N_ELEMENTS(ticknames) NE 0 THEN format = ""
IF KEYWORD_SET(vertical) THEN BEGIN
bar = REPLICATE(1B,20) # BINDGEN(ncolors)
IF Keyword_Set(invertcolors) THEN bar = Reverse(bar, 2)
IF N_ELEMENTS(position) EQ 0 THEN BEGIN
position = [0.88, 0.1, 0.95, 0.9]
ENDIF ELSE BEGIN
IF position[2]-position[0] GT position[3]-position[1] THEN BEGIN
position = [position[1], position[0], position[3], position[2]]
ENDIF
IF position[0] GE position[2] THEN Message, "Position coordinates can't
be
reconciled
.
"
IF position[1] GE position[3] THEN Message, "
Position
coordinates
can't be reconciled."
ENDELSE
ENDIF ELSE BEGIN
bar = BINDGEN(ncolors) # REPLICATE(1B, 20)
IF Keyword_Set(invertcolors) THEN bar = Reverse(bar, 1)
IF N_ELEMENTS(position) EQ 0 THEN BEGIN
position = [0.1, 0.88, 0.9, 0.95]
ENDIF ELSE BEGIN
IF position[3]-position[1] GT position[2]-position[0] THEN BEGIN
position = [position[1], position[0], position[3], position[2]]
ENDIF
IF position[0] GE position[2] THEN Message, "Position coordinates can't
be
reconciled
.
"
IF position[1] GE position[3] THEN Message, "
Position
coordinates
can't be reconciled."
ENDELSE
ENDELSE
; Scale the color bar.
bar = BYTSCL(bar, TOP=(ncolors-1 < (255-bottom))) + bottom
; Get starting locations in NORMAL coordinates.
xstart = position(0)
ystart = position(1)
; Get the size of the bar in NORMAL coordinates.
xsize = (position(2) - position(0))
ysize = (position(3) - position(1))
; Display the color bar in the window. Sizing is
; different for PostScript and regular display.
IF scalablePixels THEN BEGIN
if keyword_set(bw_to_color_keywords) then begin
dum = bw_to_color(bar, _extra = bw_to_color_keywords)
TV, dum, xstart, ystart, XSIZE=xsize, YSIZE=ysize, /Normal, true = 3
endif else begin
TV, bar, xstart, ystart, XSIZE=xsize, YSIZE=ysize, /Normal
endelse
ENDIF ELSE BEGIN
bar = CONGRID(bar, CEIL(xsize*!D.X_VSize), CEIL(ysize*!D.Y_VSize), /INTERP)
; Decomposed color off if device supports it.
CASE StrUpCase(!D.NAME) OF
'
X
': BEGIN
IF thisRelease GE 5.2 THEN Device, Get_Decomposed=thisDecomposed
Device, Decomposed=0
ENDCASE
'
WIN
': BEGIN
IF thisRelease GE 5.2 THEN Device, Get_Decomposed=thisDecomposed
Device, Decomposed=0
ENDCASE
'
MAC
': BEGIN
IF thisRelease GE 5.2 THEN Device, Get_Decomposed=thisDecomposed
Device, Decomposed=0
ENDCASE
ELSE:
ENDCASE
if keyword_set(bw_to_color_keywords) then begin
dum = bw_to_color(bar, _extra = bw_to_color_keywords)
TV, dum, xstart, ystart, /Normal, true = 3
endif else begin
TV, bar, xstart, ystart, /Normal
endelse
; Restore Decomposed state if necessary.
CASE StrUpCase(!D.NAME) OF
'
X
': BEGIN
IF thisRelease GE 5.2 THEN Device, Decomposed=thisDecomposed
ENDCASE
'
WIN
': BEGIN
IF thisRelease GE 5.2 THEN Device, Decomposed=thisDecomposed
ENDCASE
'
MAC
': BEGIN
IF thisRelease GE 5.2 THEN Device, Decomposed=thisDecomposed
ENDCASE
ELSE:
ENDCASE
ENDELSE
; Annotate the color bar.
IF KEYWORD_SET(vertical) THEN BEGIN
IF KEYWORD_SET(right) THEN BEGIN
PLOT, [minrange,maxrange], [minrange,maxrange], /NODATA, XTICKS=1, $
YTICKS=divisions, XSTYLE=1, YSTYLE=9, $
POSITION=position, COLOR=color, CHARSIZE=charsize, /NOERASE, $
YTICKFORMAT='
(
A1
)
', XTICKFORMAT='
(
A1
)
', YTICKLEN=ticklen , $
YRANGE=[minrange, maxrange], FONT=font, _EXTRA=extra, YMINOR=minor
AXIS, YAXIS=1, YRANGE=[minrange, maxrange], YTICKFORMAT=format, YTICKS=divisions, $
YTICKLEN=ticklen, YSTYLE=1, COLOR=color, CHARSIZE=charsize, $
FONT=font, YTITLE=title, _EXTRA=extra, YMINOR=minor, YTICKNAME=ticknames
ENDIF ELSE BEGIN
PLOT, [minrange,maxrange], [minrange,maxrange], /NODATA, XTICKS=1, $
YTICKS=divisions, XSTYLE=1, YSTYLE=9, YMINOR=minor, $
POSITION=position, COLOR=color, CHARSIZE=charsize, /NOERASE, $
YTICKFORMAT=format, XTICKFORMAT='
(
A1
)
', YTICKLEN=ticklen , $
YRANGE=[minrange, maxrange], FONT=font, YTITLE=title, _EXTRA=extra, $
YTICKNAME=ticknames
AXIS, YAXIS=1, YRANGE=[minrange, maxrange], YTICKFORMAT='
(
A1
)
', YTICKS=divisions, $
YTICKLEN=ticklen, YSTYLE=1, COLOR=color, CHARSIZE=charsize, $
FONT=font, _EXTRA=extra, YMINOR=minor
ENDELSE
ENDIF ELSE BEGIN
IF KEYWORD_SET(top) THEN BEGIN
PLOT, [minrange,maxrange], [minrange,maxrange], /NODATA, XTICKS=divisions, $
YTICKS=1, XSTYLE=9, YSTYLE=1, $
POSITION=position, COLOR=color, CHARSIZE=charsize, /NOERASE, $
YTICKFORMAT='
(
A1
)
', XTICKFORMAT='
(
A1
)
', XTICKLEN=ticklen, $
XRANGE=[minrange, maxrange], FONT=font, _EXTRA=extra, XMINOR=minor
AXIS, XTICKS=divisions, XSTYLE=1, COLOR=color, CHARSIZE=charsize, $
XTICKFORMAT=format, XTICKLEN=ticklen, XRANGE=[minrange, maxrange], XAXIS=1, $
FONT=font, XTITLE=title, _EXTRA=extra, XCHARSIZE=charsize, XMINOR=minor, $
XTICKNAME=ticknames
ENDIF ELSE BEGIN
PLOT, [minrange,maxrange], [minrange,maxrange], /NODATA, XTICKS=divisions, $
YTICKS=1, XSTYLE=1, YSTYLE=1, TITLE=title, $
POSITION=position, COLOR=color, CHARSIZE=charsize, /NOERASE, $
YTICKFORMAT='
(
A1
)
'
,
XTICKFORMAT
=
format
,
XTICKLEN
=
ticklen
,
$
XRANGE
=
[
minrange
,
maxrange
],
FONT
=
font
,
XMinor
=
minor
,
_EXTRA
=
extra
,
$
XTICKNAME
=
ticknames
ENDELSE
ENDELSE
;
Restore
the
previous
plot
and
map
system
variables
.
!
P
=
bang_p
!
X
=
bang_x
!
Y
=
bang_y
!
Z
=
bang_z
!
Map
=
bang_map
END
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment