【问题标题】:Overlay two geom_bar like two barplots with par(new=TRUE)用 par(new=TRUE) 像两个条形图一样覆盖两个 geom_bar
【发布时间】:2014-10-28 23:42:16
【问题描述】:

我目前有一个类似这样的情节:

sourceTable<-"dateValues;total;inHospital
2014-01-01; 80; 20
2014-01-02; 90; 15
2014-01-03; 98; 16
2014-01-04; 98; 17
2014-01-05; 100; 28
2014-01-06; 110; 28
2014-01-07; 122; 30
2014-01-08; 110; 25
2014-01-09; 100; 22
2014-01-00; 90; 20
2014-01-11; 90; 15
2014-01-12; 80; 13
2014-01-13; 82; 10"

timetable<-read.table(textConnection(sourceTable), sep=";", head=T, dec=",")
barplot(timetable$total, border="red", axes=FALSE, ylim=c(0, max(timetable$total)))
par(new=TRUE)
barplot(timetable$inHospital, border="blue", axes=FALSE, ylim=c(0, max(timetable$total)))

这给了我这个情节:

有没有办法像这样用 ggplot 和 geom_bar 做到这一点:

library(ggplot2)
ggplot(timetable, aes(x=dateValues, y=total))
  +geom_bar(stat="identity", fill="red", colour="red")

如何将第二个 ggplot 覆盖在第一个上,即:

ggplot(timetable, aes(x=dateValues, y=inHospital))
  +geom_bar(stat="identity", fill="red", colour="blue")

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

    试试这个:

    library(ggplot2)
    
    ggplot(data = timetable, aes(x = dateValues, y = total)) + 
      geom_bar(stat = "identity", fill = "grey", colour = "red")+
      geom_bar(data = timetable, aes(x = dateValues, y = inHospital),
               stat = "identity", fill = "grey", colour = "blue")
    


    编辑: 替代方案 - 正确的做法 - 在绘图前转换数据:

    library(reshape2)
    library(ggplot2)
    
    # transform the data - melt
    timetable$outHospital <- timetable$total - timetable$inHospital
    df <- melt(timetable, id = c("dateValues", "total"))
    
    # plot in one go
    ggplot(data = df, aes(x = dateValues, y = value, fill = variable)) + 
      geom_bar(stat = "identity")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多