R中如何按其他因子嵌套排序因子水平用于ggplot2可视化
需求1:model先按brand字母升序排列,同品牌下按model名称字母升序排列
核心逻辑是先将整个数据集按你需要的优先级排序,再用fct_inorder()将model的因子水平设置为数据中的出现顺序,完全自动无需手动指定水平:
library(tidyverse) # 处理数据 data_sorted1 <- data %>% # 第一排序条件:brand升序,第二排序条件:model名称升序 arrange(brand, model) %>% # 按数据出现顺序设置model的因子水平 mutate(model = fct_inorder(model), # 若需要y轴从上到下对应排序结果(和你手动实现的效果一致),添加反转代码 model = fct_rev(model)) # 绘图 ggplot(data_sorted1, aes(x = variable, y = model, color = brand)) + geom_boxplot()
需求2:model先按brand升序排列,同品牌下按variable的中位数降序排列
先计算每个model对应的variable中位数,再按排序规则调整数据集顺序,最后设置model因子水平即可:
data_sorted2 <- data %>% # 分组计算每个model的variable中位数 group_by(brand, model) %>% mutate(model_med = median(variable)) %>% ungroup() %>% # 第一排序条件:brand升序,第二排序条件:中位数降序 arrange(brand, desc(model_med)) %>% # 设置model因子水平,需要y轴反转的话保留fct_rev mutate(model = fct_inorder(model), model = fct_rev(model)) # 绘图 ggplot(data_sorted2, aes(x = variable, y = model, color = brand)) + geom_boxplot()
以上方案通用性极强,不管数据集有多少品牌、多少车型都可以自动适配,逻辑和Excel的自定义多条件排序完全一致。
内容的提问来源于stack exchange,提问作者Valen78
相关产品推荐
相关产品推荐

