This demonstration covers knowing how to place extra things on graphs at particular locations.

You can watch the recording (5 minutes 4 seconds):

or download (right click and choose the save/download link option) the recording to your computer via the link:

Coordinates in R: cord.mp4 (.mp4 format, 65.2 MB)

and read the parts of the script below (code available when viewing the full article)

This demonstration uses base plotting, which is the model of making the initial graph then adding to it with other commands.

**The script I used**

#numbers from CBS poll 14/4/16 results_csv <- " Clinton, Trump 11,88 88,8 51,33 " results <- read.csv(text=results_csv) row.names(results) <- c("Rep","Dem","Ind") results <- t(as.matrix(results)) ### 1st Graph barplot(results, beside=TRUE) ### Graph return value print(barplot(results, beside=TRUE)) ### Graph test lines barplot(results, beside=TRUE) abline(v=1, col="red", lwd=2) abline(v=6, col="blue", lwd=2) abline(v=20, col="purple", lwd=2) ### Fancy up the graph barplot(results, main="Candidate support by party affiliation", xlab="Candidate", col=c("blue","red"), sub="source: CBS poll 14th April 2016", legend.text = rownames(results), beside=TRUE, args.legend=list(x = "right", bty="n", y.intersp=1.3)) ### Extend the vertical access to give a working area for annotations barplot(results, main="Candidate support by party affiliation", xlab="Candidate", col=c("blue","red"), sub="source: CBS poll 14th April 2016", legend.text = rownames(results), beside=TRUE, args.legend=list(x = "right", bty="n", y.intersp=1.3), ylim=c(0,140)) ### Make a better looking custom y axis barplot(results, main="Candidate support by party affiliation", xlab="Candidate", col=c("blue","red"), sub="source: CBS poll 14th April 2016", legend.text = rownames(results), beside=TRUE, args.legend=list(x = "right", bty="n", y.intersp=1.3), ylim=c(0,140), axes=FALSE) axis(side=2, at=c(0,20,40,60,80,100)) ### Add a line with lines(), listing all the points the line starts, ends or turns barplot(results, main="Candidate support by party affiliation", xlab="Candidate", col=c("blue","red"), sub="source: CBS poll 14th April 2016", legend.text = rownames(results), beside=TRUE, args.legend=list(x = "right", bty="n", y.intersp=1.3), ylim=c(0,140), axes=FALSE) axis(side=2, at=c(0,20,40,60,80,100)) lines(x=c(2,2,5,5), y=c(115,120,120,115), lty=3, col="purple") ### Add a text with text() barplot(results, main="Candidate support by party affiliation", xlab="Candidate", col=c("blue","red"), sub="source: CBS poll 14th April 2016", legend.text = rownames(results), beside=TRUE, args.legend=list(x = "right", bty="n", y.intersp=1.3), ylim=c(0,140), axes=FALSE) axis(side=2, at=c(0,20,40,60,80,100)) lines(x=c(2,2,5,5), y=c(115,120,120,115), lty=3, col="purple") text(x=3.5, y=125, labels="***", col="purple") ### Add more lines and text barplot(results, main="Candidate support by party affiliation", xlab="Candidate", col=c("blue","red"), sub="source: CBS poll 14th April 2016", legend.text = rownames(results), beside=TRUE, args.legend=list(x = "right", bty="n", y.intersp=1.3), ylim=c(0,140), axes=FALSE) axis(side=2, at=c(0,20,40,60,80,100)) lines(x=c(2,2,5,5), y=c(115,120,120,115), lty=3, col="purple") text(x=3.5, y=125, labels="***", col="purple") lines(x=c(1.5,1.5,2.5,2.5), y=c(95,100,100,95), lty=4, col="black") text(x=2, y=105, labels="***", col="black") lines(x=c(4.5,4.5,5.5,5.5), y=c(95,100,100,95), lty=4, col="black") text(x=5, y=105, labels="***", col="black")