function levs,values,nlevelso nlevels=nlevelso ;------------------------------------------ ; a function that returns a vector of contour levels such that the contours ; appear evenly throughout the data ;------------------------------------------ tryagain: pass=(values ne 99999.0)*(finite(values)) goodind=where(pass) values=values(goodind) values=float(values) sortdata=values(uniq(values,sort(values))) narg=total(sortdata ne 99999.0) levsubs=floor(findgen(nlevels)*(narg/nlevels)) levels=sortdata(levsubs) sz=size(uniq(levels)) blow=min(levels)*0.9*(min(levels) gt 0)+min(levels)*1.1*(min(levels) lt 0)$ +(min(levels) eq 0.)*(-0.1) bhi=max(levels)*1.1*(max(levels) gt 0)+max(levels)*0.9*(max(levels) lt 0)$ +(max(levels) eq 0.)*(0.1) if sz(1) eq nlevels then goto,haha if min(levels) eq max(levels) then begin levels=max(levels) return,interpol([blow,levels,bhi],nlevels) endif nlevels=sz(1) print,'actual levels=',nlevels goto,tryagain haha: levels=interpol([blow,levels,bhi],nlevelso) check=where(deriv(levels) gt 1.e-7) new=n_elements(levels)-(total(deriv(levels) le 1.e-7)) levelsnew=fltarr(new) levelsnew=levels(check) levels=levelsnew levels=levels(uniq(levels)) return,interpol([blow,levels,bhi],nlevelso) end