Chapters:
1: Introduction
2: Simple example
3: Invocation
4: Finer Control
5: X-Y Plots
6: Contour Plots
7: Image Plots
8: Examples
9: Gri Commands
10: Programming
11: Environment
12: Emacs Mode
13: History
14: Installation
15: Gri Bugs
16: Test Suite
17: Gri in Press
18: Acknowledgments
19: License
Indices:
Concepts
Commands
Variables
|
10.12: Hints for Gri Programming
Here are some hints for good Gri programs:
-
Whenever working with grids (for contouring) or images, make use of the
`
show grid ' or `show image ' commands. They will give you
useful information about the statistics (min/max/histogram) of the items.
-
Use the operating system, not Gri, to manipulate your data. For
example, if you have a file whose first column is x times 100, and third
is the arcsin of y, you could do:
open "gawk '{print $1/100, sin($3)}' |"
read columns x y
|
If you have x and y in a non-decimal geographical format
(e.g. hour.minute-second format), use the operating system to convert
for you (see Open).
-
Use the `
pstack ' operator liberally in your rpn expressions
to see what is going on (see rpn Mathematics).
-
While developing programs, put a `
show columns statistics ' command
after every `read column ' command, to check that the data have been
read correctly.
-
Development time can be minimized by limiting the number of data being
processed. For example, in a multi-panel plot, it is often necessary to
try various alternatives before aesthetic scales and page layout is
achieved. The process can be speeded up by limiting the number of data
being processed, as shown below. (If Gri finds fewer data in the file
than specified, it will simply use the data that it found; so when the
program works, just change `
.n. ' into something large.)
.n. = 100 # 10000 for later
...
# Panel 1
read columns .n. x y
...
# Panel 2
read columns .n. x y
...
|
-
Create new commands to do repetitive work.
-
Use `
draw time stamp ' on all plots except for publication versions:
if !..publication..
draw time stamp
end if
|
-
For multiple panels on one page, do `
delete x scale '
or `delete y scale ' before each
new panel, so you will start afresh. Clearly identify
code for particular panels with
comments. This reduces errors you might get if you shuffle things
later.
-
Use the `
..num_col_data.. ' built-in variable to see how many data
have passed the `set input data window ' data window in the last
`read columns ' command. The following example shows how to
avoid drawing an unwanted curve:
open \f
read columns x y
close
if ..num_col_data..
draw curve
draw label "\f" at \
{rpn ..xlast.. xusertocm 0.5} \
{rpn ..ylast.. yusertocm 0.2} cm
end if
|
-
Use synonyms and `
query ' for filenames. This makes programs much
more flexible. Note that you can string synonyms together:
\dir = "~/EOS/iso0/"
query \file "Give file in directory \dir" ("1.dat")
open \dir/\file
|
It is also a good idea to give a restrictive list of possibilities in
your `query ' command, to avoid complicated `if ' commands later
(see Query).
-
Use multiple `
draw title ' commands:
draw title "Atlantic water entering Arctic Ocean"
draw title "\.command_file. \.time."
|
-
Use the `
query ' command to interact with the user (see Query). The results can be stored in variables and synonyms.
|