Code from Dominick Spracklen (below) shows a way to use discrete colours in a contoured array and create the corresponding colour bar.
;E.G.FILLED CONTOURED ARRAY (REGULAR CONTOUR SPACING) DISCRETE COLORBAR (In ~idl-course/Course_Code/dom_colorbar.pro and ~lecjm/IDL/Procedures/IDL_course/dom_colorbar.pro ) ncon=20 ; number of contours cdif=10.; contour spacing cmin=0 ; min contour value labels=intarr(ncon) ; array of switches to label contours (see contour.pro) labels(*)=1 ; all set for labelling conval=fltarr(ncon) cols=0+12*findgen(ncon+1); Colours to use (0 to 240 in jumps of 12) conval=(findgen(ncon)*cdif)+cmin ; values of contours ;Create array to contour array = (intarr(200)+1)#indgen(200) ; 200 by 200 array ;Output position ([x1,y1,x2,y2]) nopos=[0.15,0.15,0.77,0.9] ;Contour array set_plot,'ps' device,file='~lecjm/contour.eps',/encapsulated,/color ; colour eps output loadct,39 ; use 'rainbow' colour table contour,array,indgen(200),indgen(200)*4/200.,$ position=nopos,levels=conval,c_labels=labels,/cell_fill,/closed,$ c_colors=cols,ytitle='Year of PhD' ;;;;; Add color bar scale=1.0 nopos = [0.88,0.15,0.93,0.93] !p.position=nopos conmin=min(conval) conmax=max(conval) ;Contours a [2, 22] array i.e. the colourbar contour,[1,1]#(findgen(ncon+2)),[0,1],$ (findgen(ncon+2)-1)*(conmax-conmin)/(ncon-1)+conmin,/cell_fill,/closed,$ levels=(findgen(ncon)+1),$ c_colors=cols,/noerase,yrange=[conmin,conmax],xstyle=4,$ yticks=ncon,yticklen=1,ystyle=1,title='Work Intensity', $ ytickv=findgen(ncon+1)*(conmax-conmin)/(ncon-1)+conmin,charsize=1.,charthick=2 device,/close ; close .eps fileRemember for A # B, where A and B are vectors, IDL performs A # TRANSPOSE(B).
[1,1] is a 2 element vector, (findgen(ncon+2)) is a 14 element vector. So, [1,1]#(findgen(ncon+2)) is FLOAT = Array[2, 14]
;E.G. FILLED CONTOUR ARRAY (IRREGULARLY SPACED CONTOURS) + DISCRETE ;COLORBAR (JOHN MARSHAM 20/4/05) (In ~idl-course/Course_Code/dom_colorbar.pro and ~lecjm/IDL/Procedures/IDL_course/dom_colorbar.pro ) ncon=5 ; number of contours cmin=0 ; min contour value labels=intarr(ncon) ; array of switches to label contours labels(*)=1 ; all set for labelling conval=[0,10,100,150,190] ; vector of irregulalrly spaced contour values cols=0+25*findgen(ncon+1) ; Colours to use (0 to 240 in jumps of 12) array = (intarr(200)+1)#indgen(200) ; Create 'data' array to contour ; Contour 'data' array in colour (filled) nopos=[0.15,0.15,0.77,0.9] ; output position ([x1,y1,x2,y2]) set_plot,'ps' device,file='~lecjm/contour_arb.eps',/encapsulated,/color ; colour eps loadct,39 ; use 'rainbow' colour table contour,array,indgen(200),indgen(200)*4/200.,$ position=nopos,levels=conval,c_labels=labels,/cell_fill,/closed,$ c_colors=cols,ytitle='Year of PhD' ;Add lines contour,array,indgen(200),indgen(200)*4/200.,/noerase,levels=conval,$ c_labels=labels,position=nopos ;Add color bar scale=1.0 nopos = [0.88,0.15,0.93,0.93] ;position of colorbar !p.position=nopos conmin=min(conval) ;min contour value conmax=max(conval) ;max contour value contour,[1,1]#(indgen(ncon+1)),[0,1],indgen(ncon+1),/cell_fill,$ /closed,levels=indgen(ncon+1),c_colors=cols,/noerase,$ yrange=[0,ncon],xstyle=4,yticks=ncon,ytickv=indgen(ncon+1),$ ytickname=['0','10','100','150','190',' '],$ yticklen=1,ystyle=1,title='Work Intensity',charsize=1.,charthick=2 device,/close