Hi all,
Here is another method, similar to what Hein does, but using the
polymark.jnl
script to draw a whole group of points at once. (see yes? go/help
polymark for
details of the script.) This method doesn't let you make each symbol a
different
size according to the value of the field,which Hein's method would let
you do if
you like. But it's a little simpler.
Because the POLYGON/LINE command does not have the range of colors that
the POLYGON/FILL command does, unfilled shapes cannot represent the
same
range of values that filled ones do. But perhaps using POLY/LINE/FILL
for positive
and POLY/FILL without the line for negative values would be a way to
distinguish positive
and negative differences. I plot the whole field first, so that the
color key represents
all the data, then overlay just the positive values with the /LEV
qualifier to use the same
colors for the values of the variable, and qualifiers /LINE/FILL to
outline the polygons.
cancel region
use etopo120
palette light_centered
set window/aspect=`60/80`:axis
go basemap x=40:120 y=-20:40
! Create lists of x and y points at all of the grid coordinates,
! and also the function value in the region we want.
let lon = xsequence(x[gx=rose,x=40:120,y=-20:40] +
0*y[gy=rose,x=40:120,y=-20:40])
let lat = xsequence(0*x[gx=rose,x=40:120,y=-20:40] +
y[gy=rose,x=40:120,y=-20:40])
let elev = xsequence(rose[x=40:120,y=-20:40])
! Make a mask to distinguish locations of positive values
let mask = if elev ge 0 then 1
! First draw all the points with a color key representing the whole
range
go polymark poly/over/key/nolab lon, lat, elev, circle, 0.8
! Overlay just the positive values, with /LINE/FILL to outline
! these polygons, and /LEV to keep same color levels
go polymark poly/over/lev/line/fill/nokey/nolab mask*lon, mask*lat,
elev, circle, 0.8
Hein Zelle wrote:
Nicolas Schneider wrote:
I have 2-dimensional (x-y) data of temperature differences. I would now
like to draw a 2D-plot with symbols instead of filled grid boxes
(SHADE). That means that instead of a filled grid box, I would like to
draw a symbol reflecting the value in that grid box. Positive
temperature differences should be drawn with filled circles with the
size depending on the magnitude of the temperature difference.
Contrastingly, negative temperature differences should be drawn with
open circles, again depending on the magnitude of the difference.
Is this possible with ferret? Where should I look for? Under SHADE
commands or PLOT commands?
The following does approximately what you want. It's not very pretty,
I plot the data twice to distinguish between open and closed
polygons. I find it really looks better if you only use filled
polygons and let the color distinguish between negative and positive,
but that's up to you. Look for the POLYGON command in the ferret
manual for further options and explanation. Producing a circle instead
of a diamond is left as an excercise for the reader :-)
Hope that helps,
Hein Zelle
use etopo120
set region/x=40:120 /y=-20:40
set window/aspect=`60/80`:axis
palette light_centered
go basemap
let xdiamond = tsequence({-1,0,1,0})
let ydiamond = tsequence({-0,1,0,-1})
let size1 = if (rose gt 0) then 0.5+abs(rose/10000) else 0
let size2 = if (rose lt 0) then 0.5+abs(rose/10000) else 0
repeat /i=10:50:2 (repeat /j=26:66:2 (polygon /key /nolab /fill /levels=(-8000,8000,1000) /overlay x[g=rose]+xdiamond*size2, y[g=rose]+ydiamond*size2, rose ; ppl shaset reset))
repeat /i=10:50:2 (repeat /j=26:66:2 (polygon /key /nolab /line /levels=(-8000,8000,1000) /overlay x[g=rose]+xdiamond*size1, y[g=rose]+ydiamond*size1, rose ; ppl shaset reset))
-----------------------------------------------------------------<
Hein Zelle
Dept. of Oceographic Research
KNMI, The Netherlands
work: zelle@knmi.nl http://www.knmi.nl/~zelle
private: hein@icce.rug.nl http://www.icce.rug.nl/~hein
Phone: +31 (0)30 2206704
-----------------------------------------------------------------<
--------------------------------------------------------------
Zie ook/see also: http://www.knmi.nl/maildisclaimer.html
|