Plot depicting for which years I have data available I have population abundance data for various years (within three different locations):




Location
X1950
X1951
X1952
X1953
X1954
X1955




Wreck Island
NA
5
9
NA
6
8


Heron Island
17
22
29
32
NA
90


Sunshine Coast
NA
NA
12
NA
60
72




What I would like to do is create a plot where the X axis is year, and on the Y-axis is Location, and create a dot on the plot for each year that I do have data available for the particular location (So, in this instance, the actual population abundance values are irrelevant).
I am working in the R software.


Create a data.frame with your data:
dataset <- data.frame(
    Location=c("Wreck Island","Heron Island","Sunshine Coast"),
    X1950=c(NA,17,NA), X1951=c(5,22,NA), X1952=c(9,29,12),
    X1953=c(NA,32,NA), X1954=c(6,NA,60), X1955=c(8,90,72))

Create an empty plot with the years (taken from the column labels of your dataset, with the leading X removed by substr(), then coerced by as.numeric()) on the horizontal axis and an empty vertical axis:
par(mai=c(.5,1.5,.1,.1))
plot(range(as.numeric(substr(names(dataset)[-1],2,99))),c(0.5,nrow(dataset)+0.5),
    type="n",xlab="",ylab="",las=1,yaxt="n")

Write the Location on the vertical axis. We need to reverse it, otherwise the first location will be written at the bottom.
axis(2,1:3,rev(dataset$Location),las=1)

Walk through locations, and plot a dot wherever the corresponding entry is not NA. Note that the y coordinate of course counts from the bottom, whereas we count table rows from the top, so we need to calculate the y coordinate as nrow(dataset)+1-loc, which is precisely the same operation as using rev() above.
for ( loc in 1:nrow(dataset) ) {
    index <- !is.na(dataset[loc,-1])
    points(as.numeric(substr(names(dataset)[-1][index],2,99)),
        rep(nrow(dataset)+1-loc,sum(index)),
        pch=19)
}

