将geom_line添加到R中的堆叠条形图

时间:2020-07-05 20:16:16

标签: r dataframe ggplot2 plot

我看过类似的话题,但是没有发现任何适合我的情况的

我想将geom_line添加到ggplot2中的填充条形图中。我有要叠加为向量的值。有没有一种简单的方法可以将所有值都合并到同一数据框中?

我的代码(如果相关):

ggplot(df_region, aes(fill=as.factor(Secondary1), y=Total, x=Year)) + 
  geom_bar(position="fill", stat="identity") + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank()) +
  labs(y="Percentage of jobs", x = "Year") + scale_fill_manual(values=c("#8DA0CB"   , "#E78AC3"  )) + theme(axis.title.x = element_text( size = 14),axis.title.y = element_text(size =14))

enter image description here

1 个答案:

答案 0 :(得分:2)

要绘制线,geom_line必须事先计算y坐标。这可以通过aggregate完成,它返回一个data.frame。我已经编写了要用作对象的函数,但是可以将其编写为匿名函数。

f <- function(x) x[2]/sum(x)
df_line <- aggregate(Total ~ Year, df_region, f)

然后,在geom_line中设置inherit.aes = FALSE

ggplot(data=df_region, aes(x=Year, y=Total, fill=as.factor(Secondary1))) + 
  geom_bar(position="fill", stat="identity") +
  geom_line(data = df_line, mapping = aes(x = Year, y = Total), color = "red", inherit.aes = FALSE) + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank()) +
  labs(y="Percentage of jobs", x = "Year") + 
  scale_fill_manual(values=c("#8DA0CB", "#E78AC3")) + 
  theme(axis.title.x = element_text(size = 14),
        axis.title.y = element_text(size = 14))

enter image description here

测试数据

set.seed(2020)
df_region <- data.frame(Year = rep(2011:2019, each = 2),
                        Secondary1 = rep(c("a", "b"), length(2011:2019)),
                        Total = sample(10, 18, TRUE))