如何基于数据集自动设置ggplot2箱线图Y轴坐标范围并忽略离群点
要实现自动适配Y轴范围,你可以先计算需要覆盖的数值上下限,再传入coord_cartesian即可,两种常用实现方式如下:
方法1:基于已截断的数据集计算(和你的平滑线逻辑对齐)
你已经生成了排除离群值的imf.inflation_trcd数据集,直接基于该数据集的极值加少量缓冲即可,代码修改如下:
在你已有的imf.inflation_trcd生成代码后,新增Y轴范围计算逻辑:
r <- .005 imf.inflation_trcd <- imf.inflation %>% group_by(year) %>% filter(value <= quantile(value, c(r, 1-r))) # 新增:自动计算Y轴范围,上下加5%的缓冲避免图形贴边 y_lower <- min(imf.inflation_trcd$value) * 1.05 y_upper <- max(imf.inflation_trcd$value) * 1.05 # 如果数据包含负数,也可以用固定数值缓冲,比如上下各加2: # y_lower <- min(imf.inflation_trcd$value) - 2 # y_upper <- max(imf.inflation_trcd$value) + 2
然后把原有绘图代码中的coord_cartesian行替换为:
coord_cartesian(ylim = c(y_lower, y_upper)) +
方法2:完全匹配箱线图须线范围计算
如果要严格对齐ggplot箱线图的实际须线位置(默认须线延伸到1.5倍四分位距内的最远观测点),可以用boxplot.stats函数统计每年的须线极值,再取全局范围:
# 计算每年箱线图的须线上下限 box_whisker_limits <- imf.inflation %>% group_by(year) %>% summarise( lower = boxplot.stats(value)$stats[1], upper = boxplot.stats(value)$stats[5] ) # 取全局范围加缓冲 y_lower <- min(box_whisker_limits$lower) - 2 y_upper <- max(box_whisker_limits$upper) + 2
后续同样把该范围传入coord_cartesian即可。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

