R 如何在ggplot堆栈条形图上添加总行

R 如何在ggplot堆栈条形图上添加总行,r,ggplot2,bar-chart,geom-bar,R,Ggplot2,Bar Chart,Geom Bar,我很难在顶部添加一条线来表示这张堆叠条形图的总数: demandDriversdf = structure(list(year = structure(c(1356998400, 1388534400, 1420070400, 1451606400, 1483228800), tzone = "GMT", tclass = c("POSIXct",

我很难在顶部添加一条线来表示这张堆叠条形图的总数:

demandDriversdf = structure(list(year = structure(c(1356998400, 1388534400, 1420070400,
                                      1451606400, 1483228800), tzone = "GMT", tclass = c("POSIXct",
                                                                                         "POSIXt"), class = c("POSIXct", "POSIXt")), one= c(12.4882571461364,
                                                                                                                                            13.0984912135388, 12.1908055157534, 8.35335266490711, 4.38593754938248
                                                                                         ), two= c(8.73113484771066, -4.34931681021004, -3.04955505552055,
                                                                                                   -1.69136803847247, 3.06500464975644), three= c(0.0669199673877559,
                                                                                                                                                -0.194488564805058, 0.721483847234409, 2.85829802643513, 6.14894193920574
                                                                                                   ), four= c(6.98748008979101, 3.7122726468811, -15.0029846301367,
                                                                                                                     -20.3768539034347, 9.38948700033012)), .Names = c("year", "one",
                                                                                                                                                                       "two", "three", "four"), row.names = c("2013-01-01", "2014-01-01",
                                                                                                                                                                                                                "2015-01-01", "2016-01-01", "2017-01-01"), class = "data.frame")

    demandDriversdf2 = reshape2::melt(demandDriversdf, id.vars=c("year"), value.name="driver")
    rowS = rowSums(demandDriversdf[,setdiff(colnames(demandDriversdf),"year")])
    demandDriversdf2 = rbind(demandDriversdf2, data.frame(year = names(rowS), variable="Total", driver = rowS))
    demandDriversdf2$year=substr(demandDriversdf2$year,1,4)
    demandDriversdf2_1 <- subset(demandDriversdf2,driver >= 0 & variable!="Total")
    demandDriversdf2_2 <- subset(demandDriversdf2,driver < 0 & variable!="Total")
    gdemandDrivers = ggplot2::ggplot() + 
      ggplot2::geom_bar(data = demandDriversdf2_1, aes(x=year, y=driver, fill=variable),stat = "identity") +
      ggplot2::geom_bar(data = demandDriversdf2_2, aes(x=year, y=driver, fill=variable),stat = "identity") +
      ggplot2::geom_line(data = subset(demandDriversdf2, variable=="Total"), aes(x=year, y=driver)) +
      ggplot2::scale_fill_brewer(palette = 2, type = "qual")
demandDriversdf=结构(列表年份=结构,
14516064001483228800),tzone=“GMT”,tclass=c(“POSIXct”,
“POSIXt”)、class=c(“POSIXct”、“POSIXt”)、one=c(12.4882571461364、,
13.0984912135388, 12.1908055157534, 8.35335266490711, 4.38593754938248
),二=c(8.73113484771066,-4.34931681021004,-3.04955505552055,
-1.69136803847247,3.06500464975644),三=c(0.066919967387759,
-0.194488564805058, 0.721483847234409, 2.85829802643513, 6.14894193920574
),四=c(6.98748008979101,3.7122726468811,-15.00298463067,
-20.3768539034347,9.38948700033012),名称=c(“年”,“一年”,
“二”、“三”、“四”,row.names=c(“2013-01-01”、“2014-01-01”,
“2015-01-01”、“2016-01-01”、“2017-01-01”),class=“data.frame”)
demandDriversdf2=Reforme2::melt(demandDriversdf,id.vars=c(“年”),value.name=“驱动程序”)
行=行和(demandDriversdf[,setdiff(colnames(demandDriversdf),“年”))
demandDriversdf2=rbind(demandDriversdf2,data.frame(年份=名称(行),变量=“总计”,驱动程序=行))
demandDriversdf2$year=substr(demandDriversdf2$year,1,4)
demandDriversdf2_1=0&变量=“总计”)

demandDriversdf2_2只需将
group=1添加到
aes()
中的
geom_line()

原因是:

对于折线图,必须对数据点进行分组,以便它知道要连接哪些点。在这种情况下,它很简单——所有点都应该连接,所以group=1。当使用更多变量并绘制多条直线时,直线的分组通常由变量完成

参考资料:R烹饪书,章节:图形条形图和线条图(ggplot2),线条图

library(ggplot2)

ggplot() + 
  geom_bar(data = demandDriversdf2_1, aes(x=year, y=driver, fill=variable),stat = "identity") +
  geom_bar(data = demandDriversdf2_2, aes(x=year, y=driver, fill=variable),stat = "identity") +
  geom_line(data = subset(demandDriversdf2, variable=="Total"),   
            aes(x=year, y=driver, group = 1)) +
  scale_fill_brewer(palette = 2, type = "qual")