[INTERNAL] How to Make a Colorbar legend with IDL CONTOUR routine
Anonym
It is possible to use the IDL Direct Graphics CONTOUR routine to create a Colorbar Legend.
The following example shows how to create a Colorbar Legend with the IDL CONTOUR Routine.
Code example:
;++++++++BEGIN: Example Procedure++++++++
PRO ex_CONTOUR_w_legend
; Creating data.
x = FINDGEN(256) - 128.
y = (2*FINDGEN(256)) - 256.
data = SHIFT(DIST(256, 256), 128, 128)
; Initializing display.
DEVICE, DECOMPOSED = 0
LOADCT, 5
; Determining parameters of the contours.
contour_levels = 20
data_min = MIN(data)
data_max = MAX(data)
data_range = data_max - data_min
legend_levels=(data_range/(contour_levels - 1))*FINDGEN(contour_levels)+data_min
; Calculating vertical data to be displayed within the legends contour.
legend_data = legend_levels ## REPLICATE(1, 10)
PRINT, 'levels', legend_levels
PRINT, 'data', legend_data
; Displaying data results.
; Displaying filled data contours.
CONTOUR, data, x, y, LEVELS = legend_levels, /FILL, $
/XSTYLE, /YSTYLE, POSITION = [0.15, 0.25, 0.75, 0.90]
; Overplotting data contour lines.
CONTOUR, data, x, y, LEVELS = legend_levels, /FOLLOW, $
/OVERPLOT
; Displaying vertical colorbar.
; Displaying filled legend contours.
CONTOUR, legend_data, FINDGEN(10), legend_levels, $
LEVELS = legend_levels, /FILL, $
XSTYLE = 5, YSTYLE = 9, /NOERASE, $
POSITION = [0.85, 0.25, 0.90, 0.90], $
YTICKS = contour_levels - 1
; Overplotting legend contour lines.
CONTOUR, legend_data, FINDGEN(10), legend_levels, $
LEVELS = legend_levels, /OVERPLOT, /FOLLOW
; Drawing the bounding box of the colorbar.
PLOTS, [0.85, 0.899, 0.899, 0.85], [0.25, 0.25, 0.90, 0.90], $
/NORMAL
; Calculating hortizontal data to be displayed with the legends contour.
legend_data = REPLICATE(1, 10) ## legend_levels
; Displaying hortizontal colorbar.
; Displaying filled legend contours.
CONTOUR, legend_data, legend_levels, FINDGEN(10), $
LEVELS = legend_levels, /FILL, $
XSTYLE = 9, YSTYLE = 5, /NOERASE, $
POSITION = [0.15, 0.10, 0.75, 0.15]
; Overplotting legend contour lines.
CONTOUR, legend_data, legend_levels, FINDGEN(10), $
LEVELS = legend_levels, /OVERPLOT
; Drawing the bounding box of the colorbar.
PLOTS, [0.15, 0.15, 0.75, 0.75], [0.10, 0.149, 0.149, 0.10], $
/NORMAL
; Repeating display for the PRINTER device.
scr_dev = !D.NAME
SET_PLOT, 'printer'
DEVICE, /INDEX_COLOR, /LANDSCAPE, /INCHES, $
XSIZE = 11., YSIZE = 8.5, XOFFSET = 0., YOFFSET = 0.
LOADCT, 5
; Vertical.
legend_data = legend_levels ## REPLICATE(1, 10)
; Data.
CONTOUR, data, x, y, LEVELS = legend_levels, /FILL, $
/XSTYLE, /YSTYLE, POSITION = [0.15, 0.25, 0.75, 0.90]
CONTOUR, data, x, y, LEVELS = legend_levels, /FOLLOW, $
/OVERPLOT, COLOR = 128
; Legend.
CONTOUR, legend_data, FINDGEN(10), legend_levels, $
LEVELS = legend_levels, /FILL, $
XSTYLE = 5, YSTYLE = 9, /NOERASE, $
POSITION = [0.85, 0.25, 0.90, 0.90], $
YTICKS = contour_levels - 1
CONTOUR, legend_data, FINDGEN(10), legend_levels, $
LEVELS = legend_levels, /OVERPLOT
PLOTS, [0.85, 0.899, 0.899, 0.85], [0.25, 0.25, 0.90, 0.90], $
/NORMAL
; Hortizontal.
legend_data = REPLICATE(1, 10) ## legend_levels
; Legend.
CONTOUR, legend_data, legend_levels, FINDGEN(10), $
LEVELS = legend_levels, /FILL, $
XSTYLE = 9, YSTYLE = 5, /NOERASE, $
POSITION = [0.15, 0.10, 0.75, 0.15]
CONTOUR, legend_data, legend_levels, FINDGEN(10), $
LEVELS = legend_levels, /OVERPLOT
PLOTS, [0.15, 0.15, 0.75, 0.75], [0.10, 0.149, 0.149, 0.10], $
/NORMAL
DEVICE, /CLOSE_DOCUMENT
SET_PLOT, scr_dev
END
;+++++++++END: Example Procedure+++++++++