Software tutorial/Annotating plots: grid lines, arrows, lines, and identifying interesting points
This part uses the same dataset from the previous section.
If we plot the
density2 value in sequence order:
rm <- read.csv('http://openmv.net/file/raw-material-properties.csv') plot(rm$density2) # We can add gridlines to the plot: grid()
Adding lines to a plot
Now, imagine we want to add a horizontal line at the sample median.
median(rm$density2)  NA
That isn't what we were expecting - why is the median given as "NA"? In R, the NA stands for a missing value. The
rm$density2 data sequence has several missing values. To force R to calculate the median, but ignoring missing values, use this:
density2.median <- median(rm$density2, na.rm=TRUE) density2.median  13.21 # Now to add a horizontal line at this value: plot(rm$density2) abline(h=density2.median) # You can add a vertical line using the "v" input option. # The "col" argument (option) gives the desired colour. abline(v=25, col="red")
abline function adds vertical and horizontal lines to a plot. You can also add sloped lines, by specifying the slope and intercept: use the
abline(a=..., b=...) syntax.
At this point you should have the following output:
Arrows and text
You can also add arrows and text. For example, these commands will draw an arrow from the median to the MAD and add some text next to the arrow:
density2.mad = mad(rm$density2, na.rm=TRUE) # What are the y-values that are 1 median absolute deviation away from the median? upper = density2.median + density2.mad # 14.71484 lower = density2.median - density2.mad # 11.70516 # Now add these as horizontal lines: abline(h=upper, col="gray80") abline(h=lower, col="gray80") # Now draw an arrow at x=10, that goes from y=median to y=median+mad # The (x0, y0) is the starting coordinate # The (x1, y1) is the ending coordinate # The code=3 indicates that arrows heads are drawn on both sides. Also try codes 0, 1, and 2 arrows(x0=10, y0=density2.median, x1=10, y1=density2.median+density2.mad, code=3) # Finally, let's add some text to the plot at the point (x=13, y=14) text(x=13, y=14, labels="One MAD")
This is the plot you should have after these steps:
Identifying interesting points in a plot
A plot should be like a paragraph of text: it should stand on its own and tell the reader something. To help with this, it is often necessary to label interesting points on a plot, not necessarily every point.
We will first plot some data, then add labels to interesting points using the
identify(...) command in R:
# Read in some data rm <- read.csv('http://openmv.net/file/raw-material-properties.csv') # Plot the data as you normally would plot(rm$size2, ylab="Particle size: level 2", main="Powder raw material") # Now use the identify(...) command, with the same data as you plotted. # Add the "labels" option to let R use label names from "Sample" column. identify(rm$size2, labels=rm$Sample) # After issuing the "identify(...)" command, click on any interesting points in the # plot. Press "Escape" to stop selecting points.
For example, I selected these interesting points in the plot, then in my technical report to my manager and I can refer to those points.