Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Set directory
- if(.Platform$OS.type == "windows"){
- setwd("c:/R/plots/ggplot-annotated-series")
- } else {
- setwd("~/R/plots/ggplot-annotated-series")
- }
- ### Data
- data("presidential")
- data("economics")
- ### Packages
- library("ggplot2")
- ### Make dataframe of events
- events <- presidential[-(1:3),]
- ymin <- min(economics$unemploy)
- delta <- 0.05 * diff(range(economics$unemploy))
- events$ymin <- ymin
- events$timelapse <- c(diff(events$start), Inf)
- events$bump <- events$timelapse < 4*370 # ~4 years
- offsets <- rle(events$bump)
- events$offset <- unlist(mapply(function(l, v) {if(v){(l:1)+1} else {rep(1,l)}}, l = offsets$lengths, v = offsets$values, USE.NAMES = FALSE))
- events$ymax <- events$ymin + events$offset * delta
- range.x <- range(c(economics$date, events$start))
- range.y <- c(0, (max(events$offset)+1)*delta) + ymin
- ### plot time series
- ggplot(data = economics, mapping = aes(x = date, y = unemploy/1000)) +
- geom_line(color = "darkblue") +
- scale_x_date("", limits = range.x) +
- scale_y_continuous(name = "Unemployed (million)") +
- theme(axis.text.x = element_blank()) +
- xlab(NULL)
- g1 <- ggplotGrob(last_plot())
- ### plot events
- ggplot(data = events, mapping = aes(x = start)) +
- geom_segment(mapping = aes(y = ymin, xend = start, yend = ymax)) +
- geom_point(mapping = aes(y = ymax), size = 3) +
- geom_text(mapping = aes(y = ymax, label = name),
- hjust = -0.2, vjust = 0.2, size = 6) +
- scale_x_date(limits = range.x) +
- scale_y_continuous(breaks = NULL, limits = range.y) +
- xlab("Years") +
- ylab("") # creates blank space, unlike ylab(NULL)
- g2 <- ggplotGrob(last_plot())
- library("grid")
- grid.newpage()
- g <- rbind(g1, g2, size = "last")
- grid.draw(g)
- ggsave(g, file = "ggplot-series-annotated.pdf")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement