Beginner's IDL - Line Plots II

The objective of this chapter is to provide a more in-depth look at a specific topic in IDL. Here we will continue to look at line plots. We will go through steps, such as changing line colors and plot ranges, you can use to modify your line plots.

Note: Beginner's IDL - Line Plots III will be posted after the Thanksgiving holidays.

Using Color in your plots

In IDL, you can specify the color of the various plot components. The available color depends on the color table you are currently using. There is a procedure, xloadct, that would allow you to interactively load and display the available color table in IDL. Below is an example on how you can change the color of your plot as well as the background.

IDL> loadct, 5
IDL> plot, num, line, color = 45, background = 200

This will draw the plot in blue on a yellow background. The numerical range for the color is from 0 to 255.

If you want to plot the line with a different color, you will need to do the following steps.

IDL> plot, num, line, color=45, background = 200, /nodata
IDL> oplot, num, line, color = 120

Changing the Style of Your Line Plots

You can further customize your plot by using the [xyz]style keywords which affects the frame of the plot. For example, if you would like to suppress the x axis:

IDL> plot, num, line, xstyle=4

Or if you would like to suppress the y axis:

IDL> plot, num, line, ystyle=4

Below summarizes the available changes:


Axis Property Affected


Force exact axis range.


Extend axis range.


Suppress entire axis.


Suppress box style axis. (Draw only one axis)


Inhibit setting the Y axis starting value to 0. (Y axis only)

Noticed that the values are not in sequencial order. The value for the [xyz]style keyword is a bitmap and that values can be added together to set more than one property. For example, if you would like to force the exact axis range (value = 1) and to suppress the drawing of box axis (value = 8), you can use value = 8 + 1 = 9.

IDL> plot, num, line, xstyle = 9, xrange = [0, 360]

The next section will talk about how to limit the range of the axes. Other keywords you can explore include: TickLen, [XYZ]TickLen, [XYZ]GridStyle, [XYZ]Ticks, [XYZ]Minor.

Limiting the Range of Your Data

One of the nice (or not so nice) features of IDL is that it automatically create a plot using data ranges that suppositely give aesthetically pleasing axis annotations. Furthermore, it by default will override a user's input range if IDL determines that the range does not fall within it's sense of the range of aesthetically pleasing axis annotation. To make IDL plots with your range, you will need to use the above [xyz]style keyword as well as the xrange keyword.

IDL> plot, num, line, xstyle = 1, xrange=[0, 360]

Also, you can plot out average values of the data using the nsum keyword. For example, to average every 5 data points and plot those average values:

IDL> plot, xdata, ydata, nsum = 5

Plotting Data with Lograithmic Scaling

You can change to a logarithmic axis scale by using the [XYZ]Log keywords. To turn on the keyword, add a / in front of the keyword. For example, if you want to set the x axis:

IDL> x = findgen(100)
IDL> theta = x/5
IDL> plot, x, theta, xrange=[0.1, 100], /xlog

To plot the data with the Y axis set, type:

IDL> plot, x, theta, yrange[0.01,100], /ylog

To set both:

IDL> plot, x, theta, xrange=[0.1,100],yrange=[0.01,100], /xlog, /ylog

Plotting Multiple Data Sets

If you have multiple data sets and you would like to plot them all together, use the oplot command:

IDL> plot, data_set1
IDL> oplot, data_set2, linestyle = 1
IDL> oplot, data_set3, linestyle = 2

Note: The first dataset you plot establishes the data range for all subsequent overplots. You will have to make sure that the range of the first plot can cover the other datasets. The exact range can be set using the xstyle and xrange keywords.

Other commands to try out: axis

Adding Text to Line Plots

Besides the title labels, you can add text strings to the plot at locations specify by you. The xyouts procedure takes the input text strings and place it at the x and y coordinates specified. To use xyouts, a plot must already exist in the display window. For example:

IDL> plot, num, line
IDL> xyouts, 0.5, 200, 'Sine Curve'

Notice that you specify the X and Y location with data coordinates. By default, the xyouts procedure uses the data coordinate system, but the device and normal coordinate systems can be specified with appropriate keywords: /normal, /device.


The xyouts procedure can also take advantage of software or vector fonts. IDL comes supplied with a number of fonts. To use those fonts, put the fonts number (listed in the table below) right before
the string of characters (inside the quote) you want to set. For example:

IDL> xyouts, 0.5, 200, '!11Sine Curve!X'

Number Font Type Number Font Type
!3 Simplex Roman !12 Simplex Script
!4 Simplex Greek !13 Complex Script
!5 Duplex Roman !14 Gothic Italian
!6 Complex Roman !15 Gothic German
!7 Complex Greek !16 Cyrillic
!8 Complex Italian !17 Triplex Roman
!9 Math Font !18 Triplex Italian
!10 Special Characters !20 Miscellaneous
!11 Gothic English !X Revert to entry font

Notice that we have specified the font type to be Gothic English by placing !11 in front of the text string. The !X at the end of the string tells IDL that you would like to switch back to the font type before the change. If you do not specify this, all subsequent strings will be set with Gothic English characters.

Positioning Commands

The positioning and other font-manipulation commands are listed in the table below. For complete reference, see page 43 of the IDL Reference guide. Below is an example of writing a superscript.

IDL> xyouts, 0.5, 200, '!6E=mc!E2'

On the plot, the string will reads: E = mc2

Positioning Commands Action
!A Shift above the division line.
!B Shift below the divisionline.
!C "Carriage return," begins a new line of text. Shift back to the starting position and down one line.
!D Shift down to the first level subscript and decrease the character size by a factor of 0.62.
!E Shift up to the exponent level and decrease the character size by a factor of 0.44.
!I Shift down to the index level and decrease the character size by a factor of 0.44.
!L Shift down to the second level subscript. Decrease the character size by a factor of 0.62.
!N Shift back to the normal level and original character size.
!R Restore position. The current position is set from the top of the saved position stack.
!S Save position. The currente position is saved on the top of the saved positions stack.
!U Shift to upper subscript level. Decrease the character size by a factor of 0.62.
!X Return to the entry font.
!! Display the ! symbol.

Aligning Text

You can right of left justify, or center, text with respect to the location specified in the xyouts call with the alignment keyword. A value of 0 will left justify the string; a value of 1 will right justify the string; and a value of 0.5 will center the string with respect to the location specified by the x and y values.

Orienting Text

You can also specify the orientation of the text with respect to the horizontal with the orientation keyword, which specifies the number of degrees the text baseline is rotated away from the horizontal.

Annotating Plots with Lines and Symbols

To plot points or draw lines on a plot, one would use the PlotS procedure.

To draw a line with the PlotS procedure, simply provide it with vectors containing the endpoints of the line. Here is an example in which it is used to draw a baseline at y = 0:

IDL> plot, x, y, xstyle=1, xrange=[0,6]
IDL> plots, [0,6],[0,0], linestyle = 2

The plots procedure can also be used to place marker symbols at various locations. For example, the following commands will draw a diamond shape (psym = 4) at the (x,y) locations (1,1), (2,3), (3,4).

IDL> xx = [1,2,3]
IDL> yy = [1,3,4]
IDL> plots, xx, yy, psym = 4

If you wanted to connect the symbols with lines, use a negative value for the psym keyword like before.

IDL> plots, xx, yy, psym = -4


Using what you have learned here, try to modify your plot of the GHRS spectrum. Also, try to incorporate the changes into your plotting program.

Paul Lee
updated: 11/16/98