In the web pages on a sine wave and advanced sine wave, we plotted a mathematical function; in this example, we'll plot a set of data that is stored in a separate file.
We start off in the usual way. Next, we turn off the upper and
right-hand borders with the set border command
, which uses
a binary set of flags (bits 0 and 1 refer to the bottom and left
flags).
There are 21 samples in our data set with x ranging from 0 to 20. For
the tickmarks on the X axis, we don't want them to appear on the top
because we've turned that border off. We turn off the top axis tickmarks
using the nomirror
modifier. We don't want any tickmarks on
the Y axis so we unset
them.
For the first graph, we plot three curves, all of them referring to the same
data set according to the using
modifier. The pair of numbers
indicates the columns to read from a file called spectrum.tsv (tab separated values). The first
number is the X axis, which should come from column one of the data set, and the
second number states that the Y axis should be read from column two.
The first curve is actually a set of impulses
which
means vertical lines. The second curve is a series of asterisks with a
colour given by an RGB value; in this case pure red. The final curve
provides a smoothed envelope for the impulses. The result of this plot
is shown in Figure 3a.
# Clear up any existing plots.
clear
# Reset all variables to default values.
reset
# We don't need a key.
set key off
# Draw only the left-hand and bottom borders.
set border 3
# There are 21 sample points.
set xrange [0:20]
# Show tickmarks at increments of one, and don't show (mirror) them
# at the top of the graph.
set xtic 1 nomirror
# The largest value in the data set is 11.
set yrange [0:11]
# Don't show any tickmarks on the Y axis.
unset ytics
# Make some suitable labels.
set title "Frequency spectrum"
set xlabel "Frequency"
set ylabel "Power"
# Draw three curves in this graph.
plot "spectrum.tsv" using 1:2 with impulses lt 1, \
"spectrum.tsv" using 1:2 with points pt 3 lc rgb "#FF0000", \
"spectrum.tsv" using 1:2 smooth csplines lt 2
![]() Figure 3a: Smooth frequency spectrum |
If we want to plot the same data using rectangular columns (like a
histogram), we can plot with boxes
instead of
impulses
. Gnuplot does have a histogram option, as described
here, but the same effect can be achieved here with boxes.
We can produce a gap between the bars by making them narrower than their
‘slot’, hence boxwidth 0.8 relative
. And rather
than drawing only an outline of the bar, we'll have it filled-in with a
solid color by setting the style to fill solid 1.0
. The plot
command then generates the graph with boxes
.
# ______________________________________________________________________
# For the next graph, we want a histogram.
set style data boxes
# We want a small gap between solid (filled-in) bars.
set boxwidth 0.8 relative
set style fill solid 1.0
# Plot the histogram (one curve).
plot 'spectrum.tsv' using 1:2 with boxes
![]() Figure 3b: Frequency histogram |
1 0 2 1 3 3 4 10 5 4 6 0 7 0 8 0 9 0 10 0 11 2 12 6 13 1 14 0 15 0 16 4 17 1 18 0 19 0 20 1
Home | About Me | Copyright © Neil Carter |
Content last updated: 2012-02-16