ggplot2:将条形图按多个而不是单个分类变量分组

时间:2018-10-24 15:40:51

标签: r ggplot2

我有一个data.frame,看起来像这样:

df <- data.frame(mean_swd = c(4.0000, 5.3333, 6.3333, 5.6666, 3.6666),
             afd_pot = c(0, 1, 0, 0, 1),
             union_pot = c(0, 1, 1, 1, 1),
             spd_pot = c(0, 1, 0, 0, 1),
             fdp_pot = c(0, 1, 1, 0, 0),
             green_pot = c(0, 1, 0, 1, 1),
             linke_pot = c(1, 0, 1, 1, 1))

> df
  mean_swd afd_pot union_pot spd_pot fdp_pot green_pot linke_pot
1   4.0000       0         0       0       0         0         1
2   5.3333       1         1       1       1         1         0
3   6.3333       0         1       0       1         0         1
4   5.6666       0         1       0       0         1         1
5   3.6666       1         1       1       0         1         1

pot变量表示投票的可能性(1)或无选举可能性(0),mean_swd代表态度量表的平均得分(从1到7),行代表个人。

我想使用barplot生成分组的ggplot2,实际上将多个barplots放入一个绘图中。它应分别将mean_swd的平均值与6个pot变量作图,以便我可以比较mean_swd的各个人群在..._pot == 1上的平均得分(此外,但并非一定要按照这些变量的级别(1/0)进行分组,这样我就可以比较有可能对该党派进行投票的变量与没有对此党进行投票的变量之间的mean_swd

由于我没有一个用于分组的分类变量,因此我无法弄清楚该如何编写代码,也找不到解决该问题的方法。我发现所有的分组解决方案都使用单个分类变量进行分组。但是我无法将这六个变量转换为一个,因为这些potentials不是唯一的。因此,需要使用不同的单个观察值来计算单独的barplots。我还考虑过按布尔表达式进行分组,但找不到此源。

有什么建议吗?先感谢您。也可以随意批评我的问题的陈述,因为这是我有史以来的第一篇帖子。

2 个答案:

答案 0 :(得分:1)

欢迎来到stackoverflow!

您是否正在寻找类似的东西?这是朝正确的方向前进吗?

library(magrittr)
library(dplyr)
library(reshape2)
library(ggplot2)

df <- data.frame(mean_swd = c(4.0000, 5.3333, 6.3333, 5.6666, 3.6666),
                 afd_pot = c(0, 1, 0, 0, 1),
                 union_pot = c(0, 1, 1, 1, 1),
                 spd_pot = c(0, 1, 0, 0, 1),
                 fdp_pot = c(0, 1, 1, 0, 0),
                 green_pot = c(0, 1, 0, 1, 1),
                 linke_pot = c(1, 0, 1, 1, 1))

dat <- df %>%
  melt(id.vars = "mean_swd") %>% 
  group_by(variable, value) %>%
  summarise(mean = mean(mean_swd))

dat$value %<>% as.factor()

ggplot(dat, aes(variable, mean, fill = value)) + geom_col()

enter image description here

答案 1 :(得分:0)

这是您的追求吗?随时澄清。我不确定您是否愿意将Result1s都计算在内,然后将其相对于平均值进行绘制。

0s

enter image description here