Routines (alphabetical) > Object Classes > Graphics Object Classes > IDLgrContour

# IDLgrContour

Superclasses | Properties | Creation | Methods | Version History

The IDLgrContour object draws a contour plot from data stored in a rectangular array or from a set of unstructured points. Both line contours and filled contour plots can be created.

An IDLgrContour object is an atomic graphic object; it is one of the basic drawable elements of the IDL Object Graphics system, and it is not a container for other objects.

The object stores the following argument or property in double-precision if the DOUBLE_DATA property is specified, and in single-precision otherwise.

## Superclasses

IDLitComponent

## Creation

See IDLgrContour::Init.

## Properties

Objects of this class have the following properties. See IDLgrContour Properties for details on individual properties.

ALL ALPHA_CHANNEL AM_PM ANISOTROPY ANTIALIAS C_COLOR C_FILL_PATTERN C_LABEL_INTERVAL C_LABEL_NOGAPS C_LABEL_OBJECTS C_LABEL_SHOW C_LINESTYLE C_THICK C_USE_LABEL_COLOR C_USE_LABEL_ORIENTATION C_VALUE CLIP_PLANES COLOR DATA_VALUES DAYS_OF_WEEK | DEPTH_OFFSET DEPTH_TEST_DISABLE DEPTH_TEST_FUNCTION DEPTH_WRITE_DISABLE DOUBLE_DATA DOUBLE_GEOM DOWNHILL FILL GEOM GEOMX GEOMY GEOMZ HIDE LABEL_FONT LABEL_FORMAT LABEL_FRMTDATA LABEL_THRESHOLD LABEL_UNITS MAX_VALUE MIN_VALUE | MONTHS N_LEVELS PALETTE PARENT PLANAR POLYGONS REGISTER_PROPERTIES SHADE_RANGE SHADER SHADING TICKINTERVAL TICKLEN USE_TEXT_ALIGNMENTS XCOORD_CONV XRANGE YCOORD_CONV YRANGE ZRANGE

In addition, objects of this class inherit the properties of all superclasses of this class.

## Methods

This class has the following methods:

- IDLgrContour::AdjustLabelOffsets
- IDLgrContour::Cleanup
- IDLgrContour::GetCTM
- IDLgrContour::GetLabelInfo
- IDLgrContour::GetProperty
- IDLgrContour::Init
- IDLgrContour::SetProperty

In addition, this class inherits the methods of its superclasses (if any).

## Examples

### Using Contour Objects

The following code displays the contour object created above in the X-Y plane.

Note: In order to display the contour as on the plane (rather than as a three-dimensional image), you must set the PLANAR property of the contour object equal to one and explicitly set the GEOMZ property equal to zero.

mywindow = OBJ_NEW('IDLgrWindow')

myview = OBJ_NEW('IDLgrView', VIEWPLANE_RECT=[0,0,19,19])

mymodel = OBJ_NEW('IDLgrModel')

data = DIST(20)

mycontour = OBJ_NEW('IDLgrContour', data, COLOR=[100,150,200], $

C_LINESTYLE=[0,2,4], /PLANAR, GEOMZ=0, C_VALUE=INDGEN(20))

myview->Add, mymodel

mymodel->Add, mycontour

mywindow->Draw, myview

This results in the following figure:

### Displaying Date/Time Data on a Contour Display

Another possible example may be the surface temperature (in degrees Celsius) of each degree of a single circle on a sphere recorded at every second for 37 seconds after the initial recording of 59 minutes and 30 seconds after 2 o’clock pm (fourteen hundred hours) on the 30th day of March in the year 2000:

number_samples = 37

date_time = TIMEGEN(number_samples, UNITS = 'Seconds', $

START = JULDAY(3, 30, 2000, 14, 59, 30))

angle = 10.*FINDGEN(number_samples)

temperature = BYTSCL(SIN(10.*!DTOR* $

FINDGEN(number_samples)) # COS(!DTOR*angle))

As with the one-dimensional case, the format of the date/time values is specified through the LABEL_DATE routine as follows:

date_label = LABEL_DATE(DATE_FORMAT = $

['%I:%S', '%H', '%D %M, %Y'])

where %I represents minutes, %S represents seconds, %H represents hours, %D represents days, %M represents months, and %Y represents years.

The first level (closest to the axis) will contain minute and second values separated by a colon (%I:%S). The second level (just below the first level) will contain the hour values (%H). The third level (the final level farthest from the axis) will contain the day and month values separated by a space and year value separated from the day and month values by a comma (%D %M, %Y).

Since the final contour display will be filled, we should define a color palette:

oContourPalette = OBJ_NEW('IDLgrPalette')

oContourPalette->LoadCT, 5

As in the one-dimensional example, the display must be initialized:

oContourWindow = OBJ_NEW('IDLgrWindow', RETAIN = 2, $

DIMENSIONS = [800, 600])

oContourView = OBJ_NEW('IDLgrView', /DOUBLE)

oContourModel = OBJ_NEW('IDLgrModel')

oContour = OBJ_NEW('IDLgrContour', temperature, $

GEOMX = angle, GEOMY = date_time, GEOMZ = 0., $

/PLANAR, /FILL, PALETTE = oContourPalette, $

/DOUBLE_GEOM, C_VALUE = BYTSCL(INDGEN(8)), $

C_COLOR = BYTSCL(INDGEN(8)))

; Applying contour lines over the original contour display.

oContourLines = OBJ_NEW('IDLgrContour', temperature, $

GEOMX = angle, GEOMY = date_time, GEOMZ = 0.001, $

/PLANAR, /DOUBLE_GEOM, C_VALUE = BYTSCL(INDGEN(8)))

The oContourModel object will contain the IDLgrContour and IDLgrAxis objects. The oContourView object contains the oContourModel with the DOUBLE keyword. The DOUBLE and DOUBLE_GEOM keywords are set for the oContourView and oContour objects because date/time data is made up of double-precision floating-point values.

Although the date/time part of the data will actually be contained and displayed through the IDLgrAxis object, the oContour object is created first to provide a display region for the axes:

oContour->GetProperty, XRANGE = xr, YRANGE = yr, ZRange = zr

xs = NORM_COORD(xr)

xs[0] = xs[0] - 0.5

ys = NORM_COORD(yr)

ys[0] = ys[0] - 0.5

oContour->SetProperty, XCOORD_CONV = xs, YCOORD_CONV = ys

oContourLines->SetProperty, XCOORD_CONV = xs, YCOORD_CONV = ys

The oContourLines object is created to display contour lines over the filled contours. Note these lines have a GEOMZ difference of 0.001 from the filled contours. This difference is provided to display the lines over the filled contours and not in the same view plane. The NORM_COORD routine is used to create a normalized (0 to 1) display coordinate system. This coordinate system will also apply to the IDLgrAxis objects:

; X-axis title.

oTextXAxis = OBJ_NEW('IDLgrText', 'Angle (degrees)')

; X-axis.

oContourXAxis = OBJ_NEW('IDLgrAxis', 0, /EXACT, RANGE = xr, $

XCOORD_CONV = xs, YCOORD_CONV = ys, TITLE = oTextXAxis, $

LOCATION = [xr[0], yr[0], zr[0] + 0.001], TICKDIR = 0, $

TICKLEN = (0.02*(yr[1] - yr[0])))

; Y-axis title.

oTextYAxis = OBJ_NEW('IDLgrText', 'Time (seconds)')

; Y-axis (date/time axis).

oContourYAxis = OBJ_NEW('IDLgrAxis', 1, /EXACT, RANGE = yr, $

XCOORD_CONV = xs, YCOORD_CONV = ys, TITLE = oTextYAxis, $

LOCATION = [xr[0], yr[0], zr[0] + 0.001], TICKDIR = 0, $

TICKLEN = (0.02*(xr[1] - xr[0])), $

TICKFORMAT = ['LABEL_DATE', 'LABEL_DATE', 'LABEL_DATE'], $

TICKUNITS = ['Time', 'Hour', 'Day'], $

TICKLAYOUT = 2)

oContourText = OBJ_NEW('IDLgrText', $

'Measured Temperature (degrees Celsius)', $

LOCATIONS = [(xr[0] + xr[1])/2., $

(yr[1] + (0.02*(yr[0] + yr[1])))], $

XCOORD_CONV = xs, YCOORD_CONV = ys, $

ALIGNMENT = 0.5)

The TICKFORMAT, TICKINTERVAL, and TICKUNITS keywords specify the Y-axis as a date/time axis, which contains three levels related to the formats presented in the call to the LABEL_DATE routine. This example also contains the TICKLAYOUT keyword. By default, this keyword is set to 0, which provides the date/time layout shown in the plot example. In this example, TICKLAYOUT is set to 2, which rotates and boxes the tick labels.

These objects are now added to the oContourModel object and this model is added to the oContourView object:

oContourModel->Add, oContour

oContourModel->Add, oContourLines

oContourModel->Add, oContourXAxis

oContourModel->Add, oContourYAxis

oContourModel->Add, oContourText

oContourView->Add, oContourModel

Now the oContourView object, which contains all of these objects, can be viewed in the oContourWindow object:

oContourWindow->Draw, oContourView

The Draw method to oContourWindow produces the following result:

Notice the three levels of the Y-axis. These levels are arranged as specified by the previous call to the LABEL_DATE routine.

## Version History

5.1 | Introduced
5.6 | Added AM_PM, C_LABEL_INTERVAL, CLIP_PLANES, C_LABEL_OBJECTS, C_LABEL_NOGAPS, C_LABEL_SHOW, C_USE_LABEL_COLOR, C_USE_LABEL_ORIENTATION, DAYS_OF_WEEK, LABEL_FONT, LABEL_FORMAT, LABEL_FRMATDATA, LABEL_UNITS, MONTHS, and USE_TEXT_ALIGNMENTS properties
6.1 | Added ALPHA_CHANNEL property
6.4 | Added SHADER property
8.0 | Added ANTIALIAS property
8.3 | Added LABEL_THRESHOLD property

## See Also