ggplot2 - 堆叠/躲避条形图

时间:2013-06-19 04:35:40

标签: r ggplot2 bar-chart

我遇到制作条形图的问题,其中y轴不计数,但来自变量的值。

我使用stat=identity,这对一个变量来说很好。但是,如果我有两个变量并且想要创建堆叠/躲避条形图怎么办?

我在这里有一些模拟数据:

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

所以我在x轴上的三个案例是A,B和C.我想将var1和var2的值绘制成条形。谢谢!

2 个答案:

答案 0 :(得分:4)

首先,更改了您的示例数据。在创建数据框时,您不需要cbind(),因为在这种情况下,您将所有列都设为因子。

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

使用两个变量用于条形图最简单的方法是将数据从宽格式转换为长格式。

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

答案 1 :(得分:1)

我没有回答这个问题,我没有使用ggplot2。但是,如果你想以宽格式使用data.frame,另一种方法是使用``barchart from lattice 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