如何使用 ggplot2 在 R 中绘制多响应调查项?
How to plot multiple response survey items in R using ggplot2?
我将调查数据结构化为几个项目变量,这些变量表示调查受访者是否提及 (1
) 或未提及 (2
)。所以简而言之,每一行都针对不同的调查受访者,他们可以选择所有选项 a 到 c(如下面数据中第三个受访者的情况),或者 none 或只是一些。
假设这是数据集:
testdat<-data.frame(option_a=c(1,2,2,1,2),
option_b=c(1,1,2,1,2),
option_c=c(1,1,2,1,1))
绘制任何选项被选择频率的相对频率的最简单和最快的方法是什么?结果应该是一个 geom_bar 图,其中三个条代表不同的选项(a:40%,b:60%,c:20%)。换句话说,我想有一个情节,据此我可以说,受访者在 x% 的情况下选择了给定的选项。
有没有一种方法可以直接在 ggplot 中执行此操作,而无需重组数据集或将 2
s 替换为 0
s 等?我想这应该很容易,但我现在看不到它。
对于条形图,您需要将数据制成长格式。您不能在 ggplot
函数本身内执行此操作。您可以更改 ggplot
内值的级别,但您还需要重命名 fill
图例。
testdat<-data.frame(option_a=c(1,2,2,1,2),
option_b=c(1,1,2,1,2),
option_c=c(1,1,2,1,1))
require(ggplot2)
require(tidyverse)
testdat %>%
gather(option,value) %>%
ggplot(aes(x = factor(option), fill = factor((value-2)*-1))) +
geom_bar()
要获得 percentages/proportions 而不是 n
,您可以在绘制数据之前总结数据,如下所示:
testdat %>%
gather(option, value) %>%
group_by(option,value) %>%
summarise(n = n()) %>%
group_by(option) %>%
mutate(percentage = n/sum(n)*100) %>%
ggplot(aes(x = factor(option), y = percentage, fill = factor((value-2)*-1))) +
geom_bar(stat = "identity")
编辑:
只显示其中一个选项的相对频率:
testdat %>%
gather(option, value) %>%
group_by(option,value) %>%
summarise(n = n()) %>%
group_by(option) %>%
mutate(percentage = n/sum(n)*100) %>%
filter(value == 1) %>%
ggplot(aes(x = factor(option), y = percentage, fill = factor((value-2)*-1))) +
geom_bar(stat = "identity")
我将调查数据结构化为几个项目变量,这些变量表示调查受访者是否提及 (1
) 或未提及 (2
)。所以简而言之,每一行都针对不同的调查受访者,他们可以选择所有选项 a 到 c(如下面数据中第三个受访者的情况),或者 none 或只是一些。
假设这是数据集:
testdat<-data.frame(option_a=c(1,2,2,1,2),
option_b=c(1,1,2,1,2),
option_c=c(1,1,2,1,1))
绘制任何选项被选择频率的相对频率的最简单和最快的方法是什么?结果应该是一个 geom_bar 图,其中三个条代表不同的选项(a:40%,b:60%,c:20%)。换句话说,我想有一个情节,据此我可以说,受访者在 x% 的情况下选择了给定的选项。
有没有一种方法可以直接在 ggplot 中执行此操作,而无需重组数据集或将 2
s 替换为 0
s 等?我想这应该很容易,但我现在看不到它。
对于条形图,您需要将数据制成长格式。您不能在 ggplot
函数本身内执行此操作。您可以更改 ggplot
内值的级别,但您还需要重命名 fill
图例。
testdat<-data.frame(option_a=c(1,2,2,1,2),
option_b=c(1,1,2,1,2),
option_c=c(1,1,2,1,1))
require(ggplot2)
require(tidyverse)
testdat %>%
gather(option,value) %>%
ggplot(aes(x = factor(option), fill = factor((value-2)*-1))) +
geom_bar()
要获得 percentages/proportions 而不是 n
,您可以在绘制数据之前总结数据,如下所示:
testdat %>%
gather(option, value) %>%
group_by(option,value) %>%
summarise(n = n()) %>%
group_by(option) %>%
mutate(percentage = n/sum(n)*100) %>%
ggplot(aes(x = factor(option), y = percentage, fill = factor((value-2)*-1))) +
geom_bar(stat = "identity")
编辑:
只显示其中一个选项的相对频率:
testdat %>%
gather(option, value) %>%
group_by(option,value) %>%
summarise(n = n()) %>%
group_by(option) %>%
mutate(percentage = n/sum(n)*100) %>%
filter(value == 1) %>%
ggplot(aes(x = factor(option), y = percentage, fill = factor((value-2)*-1))) +
geom_bar(stat = "identity")