如何在使用ggplot2中的stat_summary函数绘制的线图中添加图例?

4

假设我正在处理以下数据:

var1 <- runif(20, 0, 30)
var2 <- runif(20, 0, 40)
year <- c(1900:1919)
data_gg <- cbind.data.frame(var1, var2, year)

我为ggplot融合数据:

data_melt <- melt(data_gg, id.vars='year')

我要为var1和var2制作一个分组条形图:

plot1 <- ggplot(data_melt, aes(as.factor(year), value)) +   
  geom_bar(aes(fill = variable), position = "dodge", stat="identity")+
  xlab('Year')+
  ylab('Density')+
  theme_light()+
  theme(panel.grid.major.x=element_blank())+
  scale_fill_manual(values=c('goldenrod2', 'firebrick2'), labels=c("Var1", 
  "Var2"))+
  theme(axis.title = element_text(size=15),
        axis.text = element_text(size=12),
        legend.title = element_text(size=13),
        legend.text = element_text(size=12))+
  theme(legend.title=element_blank())

最后,我想添加一行显示每年的累计总和(Var1 + Var2)。我使用stat_summary完成了这个操作,但它没有出现在图例中。

plot1 + stat_summary(fun.y = sum, aes(as.factor(year), value, colour="sum"), 
group=1, color='steelblue', geom = 'line', size=1.5)+
scale_colour_manual(values=c("sum"="blue"))+
labs(colour="")

如何让它出现在图例中?

谢谢 Henrik。我已经尝试过那种方法,但是无法使其工作。你能用这种方法吗? - Filippo Marolla
1
如果你尝试使用以下代码:stat_summary(fun.y = sum, aes(as.factor(year), value, col="sum", group=1), geom = 'line', size=1.5) - User2321
它有效了,非常感谢!我看到唯一的区别是你把group=1放在括号里面。也许对我来说不太清楚group=是用来干什么的...如果能解释一下就好了。谢谢。 - Filippo Marolla
1个回答

4

准确来说,要更改您的代码而不成为ggplot2专家,您需要从stat.summary调用的aes之外删除颜色参数。

stat_summary(fun.y = sum, aes(as.factor(year), value, col="sum"), group=1, geom = 'line', size=1.5)

显然,aes函数外的颜色参数(因此将颜色定义为参数)会覆盖美学映射。因此,ggplot2无法在图例中显示该映射。
就组参数而言,它用于连接点以制作线条,您可以在此处阅读有关其详细信息:ggplot2 line chart gives "geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?" 但是,在aes调用中不必添加它。实际上,如果将其留在外部,则图表不会改变。

谢谢,有用的评论。 - Filippo Marolla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接