Given a Numeric
array of 2-D latitude-longitude
data, make a smooth, filled contour plot with color bar.
First we import the packages we'll need:
import Numeric as N
import cdms, vcs
Note that we import Numeric
with the
shorthand N
to save us some typing.
Next let's make some sample data and the longitude and latitude
vectors. The grid is global and 15 x 15 degrees.
The data is in data
and
consists of two "distorted bullseyes" centered around each pole
(positive over the North Pole and negative over the South Pole).
The latitude
lat
vector goes from 90S to 90N, and the longitude
lon
vector goes from -180E to 180E:
lat = N.arange(13) * 15.0 - 90.0
lon = N.arange(25) * 15.0 - 180.0
data = N.outerproduct(N.sin(lat*N.pi/360.), N.cos(lon*N.pi/360.))
The data
array is 13 x 24,
latitude x longitude. This means each
row corresponds to a constant latitude, and each
column is a constant longitude.
To plot the data, the first thing we have to do is initialize a VCS canvas, through instantiating a canvas object:
v = vcs.init()
Then we create CDMS axis objects for the longitude and latitude axis:
lonAxis = cdms.createAxis(lon)
latAxis = cdms.createAxis(lat)
Finally, we use the isofill
method of our canvas
to plot the data with smooth, filled contours:
v.isofill(data, xaxis=lonAxis, yaxis=latAxis, continents=1, name="Example")
In plotting, VCS automatically assumes the x-axis runs through
all the columns of data
and the y-axis runs
through all the rows. Setting the keyword
continents=1
outlines "fine" continents.
The keyword name
is a string that specifies the title.
The plot looks like:
To write out the plot to a Postscript file
eg.ps
use:
v.postscript('eg.ps','l')
The 'l'
specifies landscape;
to print to portrait set the argument to 'p'
.
Note that plotting portrait will sometimes cut-off the plot
at the paper's edge.
To write out the plot to a GIF file eg.gif
:
v.gif('eg.gif','r')
The 'r'
overwrites eg.gif
if it exists.
Although the plotting methods do accept keywords to allow you to control things like axis title in your plot, CDAT's support of these methods can be spotty. To really take advantage of the package, you have to think and use CDAT in terms of objects. This is the approach I take in a more complex latitude-longitude contour plot example.
Notes: Thanks to Dean Williams for the help! This discussion applies to CDAT 3.3.