我想使用因子和两个以上的变量创建条形图!我的数据如下:
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()
这样做我放弃了因子1等提供的信息,我想使用堆叠来形象评估来自哪一组人
这个问题有优雅的解决方案吗?我读到了使用重塑来融化数据然后应用ggplot?
答案 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")
在上图中,我为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))
。