【问题标题】:Plotting multiple variables via ggplot2通过 ggplot2 绘制多个变量
【发布时间】:2012-02-05 20:49:36
【问题描述】:

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

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

每个数据点是一个介于 1-5 之间的 likert 项

使用二分法绘制总和(4 以上的每个项目都是一个,否则为 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()

这样做我会丢失 factor1 等提供的信息,我想使用堆叠来可视化评分来自哪一组人

这个问题有没有优雅的解决方案?我读到了关于使用 reshape 融化数据然后应用 ggplot 的信息?

【问题讨论】:

  • 是的,本质上 reshape 是你的朋友。您需要一个带有结果的变量和一个带有该结果标签的变量。

标签: r ggplot2 data-visualization bar-chart


【解决方案1】:

我建议如下:使用您的一种因素进行堆叠,另一种因素用于刻面。您可以将 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))

【讨论】:

  • 这真是太好了!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多