r - 通过ggplot2绘制多个变量

标签 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 的 Likert 项

使用二分版本绘制总和(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等提供的信息,我想使用堆叠来可视化评级来自哪一组人

有没有一个优雅的解决方案来解决这个问题?我读到有关使用 reshape 来融合数据然后应用 ggplot?

最佳答案

我建议如下:使用一个因子进行堆叠,另一个因子进行分面。您可以将 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,变量=变量),总和))

关于r - 通过ggplot2绘制多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152937/

相关文章:

r - 每年过滤一行

r - 如何使用 dplyr 扫描特定列?

r - Flexdashboard checkboxGroupInput 丢失 ggplot 数据

r - 将单位标签添加到雷达图并删除外环ggplot2(蜘蛛网图,coord_radar)

r - 通过分类变量和连续变量的交互可视化 GLMM 预测

python - 是否可以将 Python Seaborn 与 plotly 集成

r - 如何找到满足设定条件的数据框的尾行?

r - 标签与背景对比 : determine if color is light or dark

r - 帮助 R 和 grouping/aggregate/*apply/data.table

r - 通过重复行来转换数据帧并创建一个变量来计算两个变量的值