The unix utility jgraph is the best available tool for massaging data into two-dimensional graphs. The scripts describe the graphs at a fairly low level, however, and some experience is required to get the output you want. In this page, I've collected some jgraph scripts I've written for different purposes.
Some general things. This is not a basic introduction to jgraph. See
In this ``log'' graph (source, data file 1, data file 2), a logarithmic scale is used on the y axis. Note some of the features on this graph:
In this multi-line graph (source, data file), several lines are plotted from the one data file.
In this awk-based graph (source, data file, data file), awk is used in a slightly richer way; it filters the data, printing an average every tenth point instead of printing every point.
A graph with two axes (source) is useful for plotting two curves that have the same domain but different ranges.
There are two ways to place text on a graph. One is with newstring, as in
newstring x 3.3 y 8.5 fontsize 9 : UpperAnother is with marktype, as in this graph with strings (source), and with horizontal and vertical delimiting regions.
A graph with error bars (source, data 1, data 2, data 3, data 4, awk script) and points. Note the shifting of points to left and right to separate out the points shown at each integer level.
Another useful form of graph is a bar graph (source). As this example shows, generating the bars is slightly tricky: for each bar, it is necessary to choose width and placement. However, the bars follow a simple, regular pattern, so this is easy to do with a script.
A variant of this graph is to place text labels (source) on the x axis.
Yet another variant of this graph is to use long labels (source) that have to be rotated to fit. These can be done, with some difficult, with newstring. The rotation is anti-clockwise, about the centre of the string. Thus, since the intention is to place the right-hand end of the string at a particular point, the location of the middle of each string has to be found individually. (It is not clear why this was done this way, when the vjr directive could have been used.)
A more principled way of doing this is with the generic hash_labels formatting directive, as in this version of the above bargraph (source).
Bar graphs can become very rich, as shown in this complex example. The source was built using a simple bash script using the two input files manybars.data and manybars.in.
It can be useful to add gridlines, but annoying (sometimes) to have them at the major hash marks. They can be easily added as newcurves; for example, use
newcurve pts 0 50 100 50 gray 0.7 linewidth 0.3 marktype none linetype dashedto add a faint horizontal line at height 50 on a graph with domain [0,100]. While it is tiresome to add a newcurve instruction for every gridline, it is straightforward to generate them with an awk script.
Return to Justin Zobel's home page.