通过ggplot2绘制多个变量

时间:2012-02-05 20:49:37

标签: r ggplot2 data-visualization bar-chart

我想使用因子和两个以上的变量创建条形图!我的数据如下:

     Var1 Var2 ... VarN Factor1 Factor2
Obs1  1-5 1-5  ... 1-5     
Obs2  1-5 1-5  ... ...
Obs3  ... ...  ... ...

每个数据点都是一个不等的项目,范围从1-5

使用二分版本绘制总和(4以上的每个项目都是1,否则为0)

我使用此

转换了数据
MyDataFrame = dichotomize(MyDataFrame,>=4)
p <- colSums(MyDataFrame)
p <- data.frame(names(p),p)
names(p) <- c("var","value")
ggplot(p,aes(var,value)) + geom_bar() + coord_flip()

enter image description here

这样做我放弃了因子1等提供的信息,我想使用堆叠来形象评估来自哪一组人

这个问题有优雅的解决方案吗?我读到了使用重塑来融化数据然后应用ggplot?

1 个答案:

答案 0 :(得分:4)

我建议如下:使用你的一个因素进行堆叠,另一个用于刻面。您可以将position="fill"移至geom_bar()以使用计数而非标准化值。

my.df <- data.frame(replicate(10, sample(1:5, 100, rep=TRUE)), 
                    F1=gl(4, 5, 100, labels=letters[1:4]), 
                    F2=gl(2, 50, labels=c("+","-")))
my.df[,1:10] <- apply(my.df[,1:10], 2, function(x) ifelse(x>4, 1, 0))
library(reshape2)
my.df.melt <- melt(my.df)
library(plyr)
res <- ddply(my.df.melt, c("F1","F2","variable"), summarize, sum=sum(value))
library(ggplot2)
ggplot(res, aes(y=sum, x=variable, fill=F1)) +
   geom_bar(stat="identity", position="fill") + 
   coord_flip() +
   facet_grid(. ~ F2) + 
   ylab("Percent") + xlab("Item")

enter image description here

在上图中,我为F1(四个级别)和F2(两个级别)的每个组合显示了观察到的频率“1”(在李克特量表上超过4的值),其中有10或15个观察值:

> xtabs(~ F1 + F2, data=my.df)
   F2
F1   +  -
  a 15 10
  b 15 10
  c 10 15
  d 10 15

然后,我使用原始data.frame的“融化”版本,使用ddply计算条件项目总和得分。我相信其余的图形命令是高度可配置的,具体取决于您要显示的信息类型。

在这个简化的情况下,ddply指令相当于with(my.df.melt, aggregate(value, list(F1=F1, F2=F2, variable=variable), sum))