1

我有一堆数据 - 三个时间序列(模型组均值),按组着色,标准差由 geom_ribbon 表示。默认情况下,他们有一个很好的传说。我也有一个时间序列的观察,我想覆盖在图上(没有 geom_ribbon),如下所示:

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 添加到图例中?

4

2 回答 2

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))

阴谋

于 2012-09-11T07:49:41.203 回答
0

我猜你在构建“obs_df”时犯了一个错误。如果您使用year = 1991:2010它创建它,则在其余数据的上下文中更有意义,并且它会为您提供您希望在ggplot调用不变的情况下获得的图。

于 2012-09-11T07:49:09.470 回答