X
28 Rate this article:
No rating

[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+++++++++