I want to plot the hourly visits to a certain webpage of my website. The x-axis shows the hours (0 to 23), the y-axis shows the number of unique visits.
I'm supressing axes in plot()
and adding them with axis()
. I want only the lowest and highest y-values labelled:
axis(2,
at = seq(min(...), max(...), 1),
labels = c(min(...),
rep.int("", max(...) - min(...) - 1),
max(...)
)
)
(Ellipses in the code sample represend the column. I left this out for better visual clarity of the code structure.)
But in the plot, the label in the highest value does not appear:
Sometimes (depending on the range of values) I can get the highest value label to appear by changing rep.int("" ...
to rep.int(" "
, i.e., labelling the ticks with a space, but this doesn't work always.
Why does R not print the hightest label? And, more importantly:
How can I force R to print the highest label?
Complete code example:
sitzungen <- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 8, 4, 0, 8, 3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 2, 0, 0, 2, 0, 0, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 2, 2, 1, 0, 0, 0, 1, 0, 0, 1, 3, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 4, 1, 2, 1, 7, 7, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 3, 8, 4, 1, 2, 0, 1, 1, 0, 0, 5, 0, 3, 3, 2, 3, 1, 2, 0, 1, 2, 0, 0, 0, 1, 0, 1, 2, 3, 0, 0, 3, 1, 6, 3, 9, 1, 0, 2, 1, 4, 8, 2, 2, 2, 0, 0, 0, 2, 1, 3, 1, 1, 2, 1, 2, 3, 1, 4, 3, 0, 2, 3, 1, 3, 1, 5, 2, 0, 0, 1, 0, 1, 2, 1, 0, 3, 0, 1, 0, 3, 7, 2, 2, 1, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 15, 2, 2, 1, 0, 0, 0, 0, 0, 2, 3, 0, 3, 0, 2, 1, 1, 2, 2, 4, 2, 1, 4, 2, 1, 2, 2, 1, 0, 0, 0, 7, 0, 2, 4, 2, 0, 2, 3, 5, 2, 1, 4, 4, 2, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 2, 1, 2, 1, 1, 2, 1, 4, 1, 1, 1, 0, 0, 3, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
stunde <- rep(0:23, 20)
stuendlich <- data.frame(cbind(stunde, sitzungen))
aggr <- aggregate(sitzungen ~ stunde, stuendlich, sum)
aggr <- rbind(aggr, c(24, aggr[which(aggr$stunde == "23"),]$sitzungen))
plot(aggr, type = "s", xlim = c(0, 24), axes = FALSE, xlab = "Stunde", ylab = "Sitzungen", main = "Sitzungen pro Stunde (kumuliert)")
axis(1, at = seq(0.5, 23.5, 1), labels = 0:23)
axis(2, at = seq(min(aggr$sitzungen), max(aggr$sitzungen), 1), labels = c(min(aggr$sitzungen), rep.int(" ", max(aggr$sitzungen) - min(aggr$sitzungen) - 1), max(aggr$sitzungen)))
Don't use " "
or ""
; use NA
:
axis(2, at = seq(min(aggr$sitzungen), max(aggr$sitzungen), 1),
labels = c(min(aggr$sitzungen),
rep.int(NA, max(aggr$sitzungen) - min(aggr$sitzungen) - 1),
max(aggr$sitzungen)))