Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 27th, 2012  |  syntax: None  |  size: 1.16 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How do I fill a geom_area() plot using ggplot?
  2. created                 score   category
  3. 2011-10-19 21:26:19     2   positive
  4. 2011-10-19 22:50:33    -2   negative
  5. 2011-10-20 15:12:38    -2   negative
  6. 2011-10-20 17:19:24    -2   negative
  7. 2011-10-20 22:12:44     2   positive
  8. 2011-10-20 22:16:57     4   positive
  9. 2011-10-21 08:22:53     2   positive
  10.        
  11. require(ggplot2)
  12.  
  13. # Load data
  14. df = read.table('data.txt', header=T)
  15. df$created = as.POSIXct(df$created, tz='UTC')
  16.  
  17. # Interpolate data
  18. lin_interp = function(x, y, length.out=100) {
  19.     approx(x, y, xout=seq(min(x), max(x), length.out=length.out))$y
  20. }
  21. created.interp = lin_interp(df$created, df$created)
  22. created.interp = as.POSIXct(created.interp, origin='1970-01-01', tz='UTC')
  23. score.interp   = lin_interp(df$created, df$score)
  24. df.interp = data.frame(created=created.interp, score=score.interp)
  25.  
  26. # Make a grouping variable for each pos/neg segment
  27. cat.rle = rle(df.interp$score < 0)
  28. df.interp$group = rep.int(1:length(cat.rle$lengths), times=cat.rle$lengths)
  29.  
  30. # Plot
  31. dev.new(width=6, height=4)
  32. ggplot(data = df.interp, aes(x = created, y = score, fill=score>0, group=group)) + geom_area() + scale_fill_manual(values = c('green', 'red'))