2

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

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

我这里有一些模拟数据:

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

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

4

2 回答 2

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

在此处输入图像描述

于 2013-06-19T04:56:44.787 回答
1

我没有回答这个问题,因为我没有使用ggplot2. 但是,如果您想以宽格式使用 data.frame,另一种方法是使用 barchart fromlattice package. To getggplot2 theme, I am usinglatticeExtra。使用@Didzis 数据:

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

在此处输入图像描述

于 2013-06-19T05:14:23.453 回答