Plotting routines

Circles

The best plotting symbols, circles, are not supported by IDL by default. Put this routine in your path:

circ.pro

then add this line to your startup file:

junk=circ(/fill)

Now when you want to plot you can use the user-defined plotting symbol to get circles:

plot,indgen(10),ps=8

and you can get open circles, too:

plot,indgen(10),ps=circ()

This routine returns “8” and changes the user-defined plotting symbol to whatever circle you requested, with the keywords fill, thick, and symsize letting you make the circles filled, thicker, and bigger, respectively.

Corners

If you look closely, especially if you make your axes thick, the corners of your plots are not sharp. (Try example below.) This procedure makes sharp corners on your plot.

sharpcorners.pro

Plotting residuals

Sometimes you want to stack plots together so they share an axis. Here's some sample code that shows two ways of doing that. You can set the appropriate !x.margin or !y.margin variables to 0 to remove the gutter between the plots, or you can use the !p.position system variable directly to get exactly the position you want. Then use the xstyle, ystyle, xtickname, and ytickname keywords and the axis command to get the axes right.

x = findgen(100)/99*8     
model = sin(x)
data = model+randomn(seed, 100)
spaces = replicate(' ', 59); these will supress tick labels
blanks = replicate('', 59);null strings don't suppress tick labels                          
oldp = !p
oldy = !y ;Remember...
!p.multi = [0, 1, 2]   ;2 plots
!y.margin[0] = 0      ;put plot at bottom of plot box
plot, x, data, ps = 1, xstyle = 4+1, ytickname = [' ', blanks]
; 4+1 = no x axes + exact range
axis, 0, !y.crange[1], xaxis = 1, xtickname = spaces    ;top axis
axis, 0, !y.crange[0], xaxis = 0, xtickname = spaces    ;bottom axis
oplot, x, model
!y = oldy             ;get old !y back
!y.margin[1] = 0      ;put plot at top of plot box
!p.region = [!x.region[0], 0.3, !x.region[1], !y.region[1]]
;above shrinks down the residual plot
plot, x, data-model, ps = 1, xstyle = 8+1, ytickname = [blanks[0:5], ' ']
;8+1= bottom axis only + exact range
axis, 0, !y.crange[1], xaxis = 1, xtickname = spaces
oplot, !x.crange, [0, 0]
!y = oldy             ;get old !y back
!p = oldp