我不确定这是否一定会更好,但这里有一种方法可以在您的问题中生成相同的图形:
df %>%
group_by(x) %>%
mutate(pct = n / sum(n)) %>%
ungroup() %>%
arrange(fill != "z", desc(pct)) %>%
group_by(fill) %>%
mutate(order = row_number()) %>%
ggplot(aes(fct_reorder(x, order), pct, fill = fill)) +
geom_col()
根据您实际要比较的内容,您可能需要考虑不同的顺序或方面。例如,考虑当您选择切面与堆叠时会发生什么:
df %>%
group_by(x) %>%
mutate(pct = n / sum(n)) %>%
ggplot(aes(x, pct, fill = fill)) +
geom_col() +
facet_wrap(~ fill)
更新2019-02-18(根据评论)
更新为抽象的认知
z
提前。按序排序
mean(pct)
对于每一个
fill
然后
pct
:
df %>%
group_by(x) %>%
mutate(pct = n / sum(n)) %>%
group_by(fill) %>%
mutate(mean_pct = mean(pct)) %>%
arrange(desc(mean_pct), desc(pct)) %>%
mutate(order = row_number()) %>%
ggplot(aes(fct_reorder(x, order), pct, fill = fill)) +
geom_col()