我在制作条形图时遇到问题,其中 y 轴不是计数,而是来自变量的值。
我使用stat=identity
,这对于一个变量来说很好。但是,如果我有两个变量并且想要创建堆叠/躲避条形图怎么办?
我这里有一些模拟数据:
foo <- data.frame(case=c('A','B','C'), var1=rnorm(3), var2=rnorm(3))
所以我在 x 轴上的三个案例是 A、B 和 C。我想将 var1 和 var2 的值绘制为条形图。谢谢!
首先,更改您的示例数据。制作数据框时不需要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")
我没有回答这个问题,因为我没有使用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)