2017-07-10 116 views
0

我有一個數據集,看起來像這樣:GGPLOT2:馬年geom_ribbon

library(tidyverse) 

df <- tribble(
    ~year, ~value, ~dummy, 
    #--|--|---- 
    2003, 3, 0, 
    2004, 4, 0, 
    2005, 7, 1, 
    2006, 9, 1, 
    2007, 15, 1, 
    2008, 17, 0, 
    2009, 7, 0, 
    2010, 8, 0, 
    2011, 8, 0, 
    2012, 7, 0, 
    2013, 2, 0, 
    2014, 9, 1, 
    2015, 5, 0 
) 

我試圖繪製value系列,並在後臺灰色條爲標有dummy == 1年。 (像this

我通過正確的年R.我已嘗試以下步驟麻煩,但它不工作:

dummy_years <- df$year[df$dummy == 1] 

ggplot(df , aes(x = year)) + 
    geom_ribbon(aes(x = dummy_years, ymin = -Inf, ymax = Inf)) + 
    geom_line(aes(y = value)) 

我得到:Error: Aesthetics must be either length 1 or the same as the data (13): x, ymin, ymax

回答

1

我們可以用geom_rect,通過dummy填充,並用scale_fill_manual

library(ggplot2) 
ggplot(df) + 
    geom_line(aes(year, value)) + 
    geom_rect(aes(ymax = Inf, 
        ymin = -Inf, 
        xmin = year, 
        xmax = year + 1, 
        fill = factor(dummy)), 
       alpha = .5, 
       show.legend = FALSE) + 
    scale_fill_manual(values = c('transparent', 'grey45')) + 
    theme_minimal()