ggplot2 按第 80 个百分位重新排列我的箱线图

Posted

技术标签:

【中文标题】ggplot2 按第 80 个百分位重新排列我的箱线图【英文标题】:ggplot2 reorder my boxplot by 80th percentile 【发布时间】:2021-12-25 07:41:43 【问题描述】:

我想按照第 80 个百分位值的顺序重新排列箱线图。

我的情节是这样的:

我的代码结构如下:

ggplot(data, aes(x=reorder(y, x, median), y)) +
  geom_boxplot(fill="deepskyblue") +
  stat_boxplot(geom ='errorbar', width=0.3) + 
  theme_bw()+
  scale_y_continuous(trans="log10", n.breaks = 6)

目前我按中位数对它们进行排序。我有两个问题:

    看起来它按中值对箱线图进行排序,直到图的 1/3 左右,然后返回到随机排序。为什么会这样?

    如何轻松按第 80 个百分位排序?我尝试在quantile(0.8, y) 中替换median,但出现错误。

很遗憾,我不能将数据结构/变量作为机密共享。

谢谢。

【问题讨论】:

尝试 forcats::fct_reorder(x, y, .fun = quantile, probs = 0.8) 【参考方案1】:

    图表不按顺序的问题可能是NAs,先尝试过滤一下:

    data <- data %>% filter(!is.na(y))

    尝试FUN = quantile, prob = 0.80,在reorder 函数中你会得到:

     ggplot(data, aes(x=reorder(y, x, FUN = quantile, prob=0.80), y)) +
     geom_boxplot(fill="deepskyblue") +
     stat_boxplot(geom ='errorbar', width=0.3) + 
     theme_bw()+
     scale_y_continuous(trans="log10", n.breaks = 6)
    

【讨论】:

以上是关于ggplot2 按第 80 个百分位重新排列我的箱线图的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化箱图(boxplot)时忽视异常值(outlier)并重新分配坐标轴的范围是的可视化的箱图可以有效显示箱体实战

如何按第一位数字的降序对整数数组进行排序? [关闭]

使用ggplot2画基因表达样本的箱线图

R语言ggplot2可视化时间序列数据:ggplot2可视化在时间轴上添加按月的箱图(boxplot)

R语言R原生及可视化包ggplot2绘制并排的箱图实战(Side-by-Side Boxplots)

在ggplot2中绘制两个具有相同y变量但不同x变量的箱线图