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