如何按夺冠频次排序F1冠军华夫图的facet_wrap分面顺序
解决方法
facet_wrap的分面顺序完全由对应变量的因子水平顺序决定,你之前调整顺序未生效大概率是修改因子水平后没有赋值回原数据集,或是用了需要手动指定顺序的fct_relevel,没有匹配到实际的夺冠频次排序逻辑,直接使用forcats包的fct_infreq()函数按出现频次自动调整因子水平即可,具体操作如下:
步骤1:重设Champions列的因子水平
先加载forcats包(tidyverse系列默认已包含,无需额外安装),对Champions列按夺冠频次从高到低设置因子顺序:
library(forcats) # 按出现频次降序重设因子水平,赋值回原数据集才会生效 dfc$Champions <- fct_infreq(dfc$Champions)
步骤2:运行原有绘图代码
直接运行你之前的ggplot代码即可,分面会自动按照夺冠次数从多到少排列:
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))
补充说明:如果需要按夺冠次数升序排列,只需要在重设因子时加一层fct_rev()反转顺序即可:dfc$Champions <- fct_infreq(dfc$Champions) %>% fct_rev()
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

