# Gnuplot: Advanced Plot of Sine Wave

To improve upon the basic plot of a sine wave, this time, we'll plot more than one curve on the graph, and give each a slightly different look, so we can tell them apart.

First of all, we clean up anything lying around, and give the graph a title. This time, we want the individual points along the graph to be visible, so we set `samples` to be a smaller number. We still want the x value to vary over the same range as in the previous example, so `xrange` remains 0 to 2pi (radians).

We want tickmarks on the x axis, but the number would be rather cluttered and aren't really useful, so they are turned off with the command `set format x ""`.

Note that we divide the range of x by one less than the number of samples so that the samples and tickmarks coincide (its the fenceposts problem; the first sample occurs at zero). For instance, to fit ten samples between zero and ten, the interval between samples is 1.1 because the ‘distance’ is 11. So we need to place our tickmarks 1.1 units apart.

The `yrange` is configured to have 16 ticks, corresponding to the 16 different values a four-bit sample can take on. We then label the `ytics` accordingly.

Whereas we placed the function to be plotted in the `plot` command in the previous example, in this case, we've declared our own function for it. This avoids repetition. In order to have the sine wave placed properly against the samples, we have to manipulate it a bit. We multiply by 7.51 so that when we round the values, we'll end up with 16 integers, and add .5 so that the main curve is better aligned with the sampled curve.

We can place our own text and symbols on the graph area using the `set label` and `set arrow` commands, along with the appropriate X and Y coordinates.

Next, we set the name of the output file, using the file type variable as before. This time, a Postscript file is generated.

Finally, the `plot` command generates three curves. The first is just the main sine wave. Note that the `title` keyword has been used to label the curve in the key, and that we want a smooth curve so we use the ```with lines``` modifier. For the second curve, we actually want a series of unconnected sample markers, so we use `points`, set the type to asterisks with `pt 3`, and select a blue linecolour with `lc rgb blue`. For the third curve we draw the same function as for the second curve, but this time we don't want a smooth interpolation between points, so we use `steps`. For both the second and third curves, we want to mimic a digital aliasing effect, so we round the function samples to zero with the `int()` function.

The `plot` command takes many arguments such as `using`, `with`, and `smooth`. It also understands options like `linecolor` (which can be abbreviated to `lc`, `linewidth` (`lw`), `pointtype` (`pt`), and so on. See `help linestyle` for more options. To generate a sample graph showing all the available lines, points, colours, amongst other things, set the appropriate terminal type and run the command `test`; bear in mind that the same option values may well look different on different terminals.

``````
# Delete previous plots.
clear

# Reset all configurations to their defaults.
reset

set title "Aliasing with 4-bit Sampling Resolution"

# We want 50 samples (half the default number) over
# one full sine wave.
set samples 50
set xrange [0:6.28]

# Show the tickmarks but don't show the numbers
# (it's too cluttered). Ticks is one less than samples
# because the first tick is at zero.
set xtics 0, 6.28/49, 6.28
set format x ""

# Show the tickmarks on the Y axis, but don't show
# the numbers.
set yrange[-7:8]
set ytics ("0000" -7, "0001" -6, "0010" -5, "0011" -4, "0100" -3, \
"0101" -2, "0110" -1, "0111" 0, "1000" 1, "1001" 2, "1010" 3, \
"1011" 4, "1100" 5, "1101" 6, "1110" 7, "1111" 8 )

# Define the function to plot
f(x) = (sin(x) * 7.51) + .5

# Draw a vertical arrow showing height of curve at this point.
# Place it halfway along 9th sample (counting from zero).
set arrow from (6.26/49)*8.5, -7 to (6.26/49)*8.5, 6

# Give the arrow a label.
set label "Level #14" at 0.35, 0

# Plot three curves with different styles.
plot f(x) title "Original signal" with lines, \
int(f(x)) title "Discrete samples" with points pt 3 lc rgb "blue", \
int(f(x)) title "Discrete signal" with steps lc rgb "blue"

```
```