ggplot2箱线图按第80百分位数排序方法及排序异常问题问询
问题1 排序部分失效原因
- 首要原因是
reorder函数的参数顺序错误:reorder的标准语法是reorder(待排序的分类变量, 用于排序的数值变量, 汇总函数)。你当前代码里写的reorder(y, x, median)默认是拿x作为数值变量、y作为分类变量计算中位数排序,如果你的x实际是分类变量、y是数值变量,参数顺序完全颠倒,自然会出现排序逻辑混乱的情况。 - 排除参数错误的情况后,如果存在大量分类的中位数数值完全相等,这些中位数相同的分类会保持原始数据的因子顺序,看起来就像随机排序,这也是你描述的“前部分符合排序、后部分乱序”的典型诱因。
问题2 按80百分位数排序实现方法
你直接替换为quantile(0.8, y)报错是因为quantile的参数顺序错误,且reorder的第三个参数需要传入一个作用于数值向量的函数,正确写法参考如下(先修正reorder的参数顺序,再替换汇总函数为计算80百分位数的匿名函数):
ggplot(data, aes(x=reorder(x, y, function(v) quantile(v, probs = 0.8, na.rm = TRUE)), y=y)) + geom_boxplot(fill="deepskyblue") + stat_boxplot(geom ='errorbar', width=0.3) + theme_bw()+ scale_y_continuous(trans="log10", n.breaks = 6)
代码中加na.rm = T是为了避免数据存在缺失值时计算分位数报错,你可以根据自己的数据情况选择是否保留。
内容的提问来源于stack exchange,提问作者tm95
相关产品推荐
相关产品推荐

