我有一个数据框,我感兴趣的是两个分类变量Type和Location之间的关系,Type有5个级别,Location有20个级别。
我想绘制每个位置的类型百分比。 我想知道是否有使用 ggplot2 的简洁方法吗?
在我的情况下,x轴上的变量有20个级别,所以我也遇到间距问题,任何帮助都将不胜感激
修改 一个更具体的例子:
df
gender beverage
1 Female coke
2 Male bear
3 Male coke
4 Female bear
5 Male tea
6 Male bear
7 Female water
8 Female tea
9 Female bear
10 Male tea
我想绘制每种饮料的性别明智百分比, 例如:有3名喝茶的人,其中2名是男性,1名是女性,因此男性%为66.67,女性比例为33.33 因此,在与茶相对应的x轴上,应该有两个男性,y = 66.67,女性,y = 33.33。
答案 0 :(得分:3)
最简单的方法是预处理,因为我们必须按性别分别计算百分比。我使用complete
来确保我们在data.frame中明确显示零百分比条,否则ggplot
将忽略该条并扩大其他性别栏。
library(dplyr)
library(tidyr)
df2 <- df %>%
group_by(gender, beverage) %>%
tally() %>%
complete(beverage, fill = list(n = 0)) %>%
mutate(percentage = n / sum(n) * 100)
ggplot(df2, aes(beverage, percentage, fill = gender)) +
geom_bar(stat = 'identity', position = 'dodge') +
theme_bw()
或者相反:
df3 <- df %>%
group_by(beverage, gender) %>%
tally() %>%
complete(gender, fill = list(n = 0)) %>%
mutate(percentage = n / sum(n) * 100)
ggplot(df3, aes(beverage, percentage, fill = gender)) +
geom_bar(stat = 'identity', position = 'dodge') +
theme_bw()