2012-09-11 56 views
1

我有一堆數據 - 三個時間序列(模型組均值),按組顯示,標準差由geom_ribbon表示。默認情況下,他們有一個很好的傳說。我也有意見的一個時間序列,我要疊加在劇情(不geom_ribbon),像這樣:在ggplot2中添加帶圖例的任意系列?

df <- data.frame(year=1991:2010, group=c(rep('group1',20), rep('group2',20), rep('group3',20)), mean=c(cumsum(abs(rnorm(20))),cumsum(abs(rnorm(20))),cumsum(abs(rnorm(20)))),sd=3+rnorm(60)) 
obs_df <- data.frame(year=1991:2010, value=cumsum(abs(rnorm(20)))) 
ggplot(df, aes(x=year, y=mean)) + geom_line(aes(colour=group)) + geom_ribbon(aes(ymax=mean+sd, ymin=mean-sd, fill=group), alpha = 0.2) +geom_line(data=obs_df, aes(x=year, y=value)) 

但意見並不出現在傳說中,因爲它不是彩色的(我想這黑色)。我如何將obs添加到圖例中?

回答

6

首先,創建的dfobs_df組合數據幀:

dat <- rbind(df, data.frame(year = obs_df$year, 
        group = "obs", mean = obs_df$value, sd = 0)) 

簡介:

ggplot(dat, aes(x=year, y=mean)) + 
geom_line(aes(colour=group)) + 
geom_ribbon(aes(ymax=mean+sd, ymin=mean-sd, fill=group), alpha = 0.2) + 
scale_colour_manual(values = c("red", "green", "blue", "black")) + 
scale_fill_manual(values = c("red", "green", "blue", NA)) 

plot

+0

是的!謝謝,正是我想要的。 (順便說一句,我在問題中修正了年份錯字,如果您想更新圖表:)) – naught101

+1

我更新了圖表。 –

0

我猜你在爲你的'obs_df'構建時犯了一個錯誤。如果使用year = 1991:2010創建它,則在其餘數據的上下文中更有意義,它會給出您希望的調用ggplot調用不變的情況。

+0

那是在問題的錯字,固定,感謝..的陰謀工作正常,問題是obs線(黑色)不出現在圖例中。 – naught101

+0

您是否也想鍵入「不顯示」? –