You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整ggplot2的Y轴刻度:显示离群点且避免箱线图被压缩

解决ggplot2箱线图因离群点压缩主数据区域的Y轴刻度问题

当数据存在少量大幅离群点时,默认均匀刻度的Y轴会把集中在小范围的主数据压缩到图底部,难以观察细节。你可以通过自定义坐标轴变换函数实现分段等距的视觉效果,既保留所有离群点,又能清晰展示主数据区域。

具体实现步骤

  1. 定义自定义变换函数
    我们需要创建正向(数据转视觉坐标)和逆向(视觉坐标转数据)的变换规则,让0-1区间保持原比例,1以上的区间按比例压缩,从而让0-1和1-3的视觉间距近似相等:
library(ggplot2)

# 自定义坐标轴变换
custom_trans <- function() {
  trans_new(
    name = "custom_segment",
    # 正向变换:1以内数值不变,1以上数值压缩为原区间的1/2
    transform = function(x) {
      ifelse(x <= 1, x, 1 + (x - 1)/2)
    },
    # 逆变换:将视觉坐标还原为原始数据值,用于生成轴标签
    inverse = function(y) {
      ifelse(y <= 1, y, 1 + 2*(y - 1))
    }
  )
}
  1. 应用变换到绘图中
    把自定义变换应用到scale_y_continuous中,同时手动指定刻度位置,让关键数值清晰显示:
# 生成示例数据
dat <- data.frame (cat = "A", result = rnorm (87, 0.26, 0.19))
new_values <- data.frame(cat = "A", result = c(3.4 ,3.2))
dat <- rbind(dat, new_values)

# 绘制图形
ggplot(dat, aes(x = cat, y = result)) +
  geom_boxplot() +
  geom_jitter(size = 1.2) +
  scale_y_continuous(
    trans = custom_trans(),
    breaks = c(0, 0.5, 1, 2, 3),
    labels = as.character(c(0, 0.5, 1, 2, 3))
  ) +
  labs(y = "Result")

原理说明

  • 正向变换将1-3的数值区间压缩为视觉上的1-2区间,使得0-1和1-3的视觉长度近似相等,主数据区域不再被压缩
  • 逆变换保证Y轴上的标签显示的是原始数据的真实数值,不会造成误解
  • 你可以根据实际需求调整压缩比例:比如要让0-1和1-4的视觉间距相等,只需把正向变换里的(x-1)/2改成(x-1)/3,逆变换里的2*(y-1)改成3*(y-1)即可

内容的提问来源于stack exchange,提问作者A.Benson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:40:17