数据集
gender <- c('Male', 'Male', 'Male', 'Female', 'Female', 'Female', 'Male', 'Male', 'Male', 'Female', 'Female', 'Female', 'Female', 'Female', 'Male', 'Female', 'Female', 'Male', 'Female', 'Female')
answer <- c('Yes', 'No', 'Yes', 'Yes', 'No', 'No', 'No', 'No', 'No', 'No', 'No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'Yes')
df <- data.frame(gender, answer)
对女性有偏见:
df %>% ggplot(aes(gender, fill = gender)) + geom_bar()
我的任务是构建一个图表,以便轻松找出两种性别中哪一种更有可能说'Yes'
.
但是,考虑到偏见,我不能只是这样做
df %>% ggplot(aes(x = answer, fill = gender)) + geom_bar(position = 'dodge')
or even
df %>% ggplot(aes(x = answer, y = ..count../sum(..count..), fill = gender)) +
geom_bar(position = 'dodge')
为了减轻偏差,我需要将每个计数分别除以男性或女性总数,以便'Female'
条形总计为1
以及'Male'
那些。就像这样:
df.total <- df %>% count(gender)
male.total <- (df.total %>% filter(gender == 'Male'))$n
female.total <- (df.total %>% filter(gender == 'Female'))$n
df %>% count(answer, gender) %>%
mutate(freq = n/if_else(gender == 'Male', male.total, female.total)) %>%
ggplot(aes(x = answer, y = freq, fill = gender)) +
geom_bar(stat="identity", position = 'dodge')
这描绘了一幅完全不同的画面。
问题:
- 有没有一种方法可以仅使用来简化前一段代码
dplyr
and ggplot2
?
- 还有其他库可以做得更好吗?
- 上述类型的图表有约定的名称吗?
Thanks.