R中是否有更简便的方法标准化ggplot2分面饼图的高度?
ggplot2分面饼图统一尺寸的简化实现方案
方法1:dplyr分组自动计算占比
相比手动为每个分类写判断逻辑的写法,用group_by()可以自动对所有category分组计算内部占比,新增分类也不需要修改代码,还可以直接和绘图逻辑串成管道:
library(dplyr) library(ggplot2) df %>% count(category, group) %>% # 按category分组后sum(n)即为当前分类的总样本量 group_by(category) %>% mutate(proportion = n / sum(n)) %>% ggplot(aes(x = "", y = proportion, fill = factor(group))) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0) + facet_wrap(~category)
方法2:用ggplot内置参数实现自动标准化,无需提前计算占比
直接给geom_bar加上position = "fill"参数,ggplot会自动将每个分面下的y值标准化为0-1区间的占比,代码更短:
df %>% count(category, group) %>% ggplot(aes(x = "", y = n, fill = factor(group))) + # position="fill"自动完成堆叠占比标准化 geom_bar(stat = "identity", width = 1, position = "fill") + coord_polar("y", start = 0) + facet_wrap(~category)
注:你原有代码中用到的
Type字段大概率是category的笔误,运行前注意替换避免报错。
内容的提问来源于stack exchange,提问作者Bry74n1
相关产品推荐
相关产品推荐

