如何在ggplot中按降序排列多个箱线图及对应aes属性
按降序排列ggplot箱线图的实现方法
要让箱线图按Pn的均值降序排列Genotype类别,同时保留原有绘图的所有样式属性,你需要先对数据集的Genotype因子水平重新排序,再传入ggplot绘图。具体步骤如下:
步骤1:重新排序Genotype的因子水平
根据每个Genotype对应的Pn均值从高到低排序,把Genotype转换成指定顺序的因子:
# 加载必要工具包 library(dplyr) library(ggplot2) # 按Pn均值降序排列Genotype的因子水平 data_sorted <- data %>% group_by(Genotype) %>% mutate(mean_pn = mean(Pn, na.rm = TRUE)) %>% ungroup() %>% arrange(desc(mean_pn)) %>% mutate(Genotype = factor(Genotype, levels = unique(Genotype)))
步骤2:使用排序后的数据集绘图
用排序后的data_sorted替换原数据集,保留你原本的所有绘图参数:
ggplot(data_sorted, aes(x=Genotype, y=Pn, fill=Specie)) + stat_boxplot(geom = "errorbar") + scale_fill_manual(values=c('#e9002d', '#ffaa00', '#00b000')) + geom_boxplot(outlier.shape = NA, linetype = 3)
补充说明
- 这里默认按Pn的均值作为排序依据,如果你想按中位数或其他统计量排序,只需把
mean(Pn, na.rm = TRUE)替换成median(Pn, na.rm = TRUE)即可。 - 重新排序因子水平后,ggplot会自动按新的水平顺序绘制x轴,实现降序排列的效果。
内容的提问来源于stack exchange,提问作者Ikram Bashir
相关产品推荐
相关产品推荐

