2017-01-06 108 views
1

我認爲堆積列是ggplot2下的默認行爲,但似乎並沒有爲我的情節發生。我正在嘗試使用兩個矢量(可能有或沒有相同的長度),並將它們繪製在與疊加條相同的圖中。下面是一個簡單的例子:R ggplot2:列不堆積

z1<-c(500, 300, 200, 100) 
z2<-c(800, 100, 50) 

names(z1)<-c("a", "b", "c", "d") 
names(z2)<-c("a", "c", "e") 

z1<-as.data.frame(z1) 
z2<-as.data.frame(z2) 

colnames(z1)<-"total" 
colnames(z2)<-"total" 

ggplot()+ 
    labs(x="", y="") + 
    theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) + 
    scale_y_continuous(labels=format_si()) + 
    ggtitle("Test") + 
    geom_bar(data=z1, aes(x=rownames(z1), y=total),position="identity",stat="identity", 
    fill=rgb(red=200, green=0, blue=50, maxColorValue = 255)) + 
    geom_bar(data=z2, aes(x=rownames(z2), y=total),position="identity",stat="identity", 
    fill=rgb(red=0, green=200, blue=50, maxColorValue = 255)) 

給我:

enter image description here

正如你可以看到,A和C元素是相互替代的堆疊的前面。

+0

酒吧將被堆疊。不同的'geom_bar'調用不會相互堆疊。如果你整理你的數據,一切都會按照你的預期工作。 – Gregor

+0

如何整理我的數據? – user3390169

+0

結合到一個數據幀。每個維度一列(在這種情況下,一列用於x軸位置,一列用於y軸位置,一列用於填充顏色)。 [全文解釋在這裏](http://vita.had.co.nz/papers/tidy-data.pdf)。您應該使用'tidyr :: gather'或'reshape2 :: melt'來獲取長格式的數據(如果您搜索「從寬到長的數據」,則需要堆棧溢出的大量示例),添加指示顏色的列,然後將這兩個數據幀放在一起。 – Gregor

回答

1

剛剛嘗試這一點:從單一的'geom_bar`呼叫

df <- rbind(cbind(z1, type=rownames(z1), data='z1'), cbind(z2, type=rownames(z2), data='z2')) 
ggplot(df, aes(type, total, fill=data)) + 
    geom_bar(stat="identity") + 
    scale_fill_manual(values=c(rgb(red=200, green=0, blue=50, maxColorValue = 255), rgb(red=0, green=200, blue=50, maxColorValue = 255))) 

enter image description here

1

這種類型的數據的組織會更好地工作:

z1<-c(500, 300, 200, 100) 
z2<-c(800, 100, 50) 

names(z1)<-c("a", "b", "c", "d") 
names(z2)<-c("a", "c", "e") 

z1<-as.data.frame(z1) 
z2<-as.data.frame(z2) 

colnames(z1)<-"total" 
colnames(z2)<-"total" 

添加組(Z1,Z2)的數據

z1$Group <- "z1" 
z2$Group <- "z2" 

添加rownames作爲變量列

z1$rnm <- rownames(z1) 
z2$rnm <- rownames(z2) 

將這些結合在一起

zt <- rbind(z1, z2) 

一個更簡化圖

ggplot(zt, aes(x=rnm, y=total, fill=Group)) + 
    geom_bar(stat="identity") 

在這裏它的核心,你需要了解的美學和什麼類型的數據是最有效的與GGPLOT2。對每個組/數據分別呼叫忽略具有幾個級別的因子變量的能力。例如,在該示例中,針對rnm實驗交換Group