Advertisement
Guest User

r-ggplot-time-series-with-events

a guest
Feb 10th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 1.77 KB | None | 0 0
  1. ### Set directory
  2. if(.Platform$OS.type == "windows"){
  3.   setwd("c:/R/plots/ggplot-annotated-series")
  4. } else {
  5.   setwd("~/R/plots/ggplot-annotated-series")
  6. }
  7.  
  8. ### Data
  9. data("presidential")
  10. data("economics")
  11.  
  12. ### Packages
  13. library("ggplot2")
  14.  
  15. ### Make dataframe of events
  16. events <- presidential[-(1:3),]
  17. ymin <- min(economics$unemploy)
  18. delta <- 0.05 * diff(range(economics$unemploy))
  19. events$ymin <- ymin
  20. events$timelapse <- c(diff(events$start), Inf)
  21. events$bump <- events$timelapse < 4*370 # ~4 years
  22. offsets <- rle(events$bump)
  23. 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))
  24. events$ymax <- events$ymin + events$offset * delta
  25. range.x <- range(c(economics$date, events$start))
  26. range.y <- c(0, (max(events$offset)+1)*delta) + ymin
  27.  
  28. ### plot time series
  29. ggplot(data = economics, mapping = aes(x = date, y = unemploy/1000)) +
  30.     geom_line(color = "darkblue") +
  31.     scale_x_date("", limits = range.x) +  
  32.     scale_y_continuous(name = "Unemployed (million)") +
  33.     theme(axis.text.x = element_blank()) +
  34.     xlab(NULL)
  35. g1 <- ggplotGrob(last_plot())
  36. ### plot events
  37. ggplot(data = events, mapping = aes(x = start)) +
  38.     geom_segment(mapping = aes(y = ymin, xend = start, yend = ymax)) +
  39.     geom_point(mapping = aes(y = ymax), size = 3) +
  40.     geom_text(mapping = aes(y = ymax, label = name),
  41.         hjust = -0.2, vjust = 0.2, size = 6) +
  42.     scale_x_date(limits = range.x) +
  43.     scale_y_continuous(breaks = NULL, limits = range.y) +
  44.     xlab("Years") +
  45.     ylab("")  # creates blank space, unlike ylab(NULL)
  46. g2 <- ggplotGrob(last_plot())
  47.  
  48.  
  49. library("grid")
  50. grid.newpage()
  51. g <- rbind(g1, g2, size = "last")
  52. grid.draw(g)
  53.  
  54. ggsave(g, file = "ggplot-series-annotated.pdf")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement