2013-06-19 103 views
2

我在制作条形图时出现了问题,其中y轴不计数,但是来自变量的值。ggplot2 - 堆叠/遮挡条形图

我使用stat=identity,这对一个变量很合适。但是如果我有两个变量并且想要创建堆叠/遮挡条形图呢?

我这里有一些模拟数据:

foo <- data.frame(case=c('A','B','C'), var1=rnorm(3), var2=rnorm(3)) 

所以我的三个纠纷案对x轴分别为A,B和C.我想绘制VAR1和VAR2为条形的值。谢谢!

回答

4

首先,更改您的示例数据。制作数据框时,您不需要cbind(),因为在这种情况下,您可以将所有列作为因子。

foo <- data.frame(case=c('A','B','C'), var1=rnorm(3), var2=rnorm(3)) 

要使用两个变量barplot最简单的方法是将数据从宽到长格式化。

library(reshape2) 
foo.long<-melt(foo) 
foo.long 
    case variable  value 
1 A  var1 0.7150827 
2 B  var1 -0.5279363 

现在使用value为y值和variable用于填充。 stat="identity"position="dodge"将确保实际值被绘制并且酒吧被锁定。

ggplot(foo.long, aes(case,value,fill=variable))+ 
     geom_bar(position="dodge",stat="identity") 

enter image description here

+0

感谢一大堆!我也改变了我的问题中的模拟数据,以免混淆未来的读者。 – Heisenberg

+0

嗯,我刚刚遇到一个真实的实例,其中我的数据框中的所有列(从Excel导入)都是向量。你能否解释或指出我对此行为的资源? R何时认为一列是因素? – Heisenberg

+0

出于好奇,是否可以控制哪个变量首先从ggplot绘制?或者我必须重新排列数据框? – Heisenberg

1

我不回答这个问题,在SENS我不使用ggplot2。但是,如果您想使用其宽格式的data.frame,另一种方法是使用“格子from晶格package. To get ggplot2 theme, I am using latticeExtra`。使用@Didzis数据:

library(latticeExtra) 
barchart(var1+var2~case,data=foo,origin=0, 
    par.settings = ggplot2like(),axis=axis.grid,auto.key=TRUE) 

enter image description here