2014-09-04 13 views
7

目前,我有一個類似的陰謀:將兩張geom_bar像兩個barplots同參數(新= TRUE)

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

,給了我這樣的情節:

two overlayed barplots

是否有用ggplot和geom_bar這樣做的方法:

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

如何疊加第二個ggp很多在第一個,即:

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

回答

11

試試這個:

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

enter image description here


編輯: 另類 - 正道 - 變換繪圖前的數據:

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

enter image description here

+3

第二個版本,甚至更好!感謝分享! – 2014-09-04 11:54:43