按频率排序 facet_wrap 个级别

ordering facet_wrap levels by frequency

我正在尝试为 F1 车手迄今为止赢得的冠军制作华夫饼图表。图表效果不错,但带有字母标签。我希望它从赢得最多的冠军到最少的冠军开始。

我试过排序fct_relevel。但没有任何效果。下面是代码

ggplot(data = dfc, aes(fill=Champions, values=one)) +
  geom_waffle(color = "cornsilk", size=0.25, n_rows=7)+
  facet_wrap(~Champions, nrow = 3, strip.position = "bottom",labeller = label_wrap_gen(6))

这是 result我在找

你可以找到完整的代码here

数据集看起来像

Season    Champions    Team   one
1              a           x     1
2              a           x     1
3              b           y     1
4              a           x     1
5              c           z     1

这是一个使用 forcats 的解决方案(也是 tidyverse 包的一部分)。

fct_infreq() 根据数据中的频率对因子进行排序,您可以使用它来指定数据中水平的排序。

dfc$Champions <- factor(dfc$Champions, levels=levels(fct_infreq(dfc$Champions)))

ggplot(data = dfc, aes(fill=Champions, values=one)) +
  geom_waffle(color = "cornsilk", size=0.25, n_rows=7) +
  facet_wrap(~Champions, nrow = 3, strip.position = "bottom", labeller = label_wrap_gen(6))