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

如何使用ggplot截断y轴400-2800区间以清晰展示数据分布

解决方案

前置依赖

首先安装并加载所需包:

install.packages(c("ggplot2", "ggbreak"))
library(ggplot2)
library(ggbreak)

核心实现代码

以下代码直接适配你的需求,将y轴400~2800区间截断隐藏,你可以直接替换示例数据为你的真实数据集:

# 模拟匹配场景的示例数据(可替换为你的真实数据)
set.seed(123)
plot_data <- data.frame(
  group = rep(c("处理组1", "处理组2", "对照组1", "对照组2"), each = 100),
  value = c(rnorm(392, mean = 180, sd = 60), rnorm(8, mean = 3000, sd = 150))
)

# 绘制带截断y轴的分组箱线图
ggplot(plot_data, aes(x = group, y = value, fill = group)) +
  geom_boxplot(width = 0.6) +
  # 核心截断配置
  scale_y_break(
    breaks = c(400, 2800),
    scales = "free",
    # 可自定义上下段的y轴刻度
    ticklabels = c(0, 100, 200, 300, 400, 2800, 2900, 3000, 3100),
    # 调整截断标记的间隙大小
    space = 0.1
  ) +
  labs(x = "分组", y = "数值") +
  theme_bw()

常见调用失败原因(对应你之前尝试无效的问题)

  • 不要同时调用scale_y_continuous的limits参数和scale_y_break,二者参数冲突会导致截断失效
  • 如果你的绘图包含分面,需要将scale_y_break放在facet_wrap/facet_grid之后调用
  • 调用前确保ggbreak包升级到最新版本,旧版本存在分组绘图适配bug

期刊友好替代方案(无需截断轴)

如果投稿期刊不允许使用截断轴,可以将数据拆分为两个子集分别绘图后拼接:

library(patchwork)
# 绘制400以下区间的箱线图
p_low <- ggplot(plot_data[plot_data$value < 400,], aes(x = group, y = value, fill = group)) +
  geom_boxplot(width = 0.6) +
  coord_cartesian(ylim = c(0, 400)) +
  labs(x = "分组", y = "数值") +
  theme_bw() +
  theme(legend.position = "none")

# 绘制2800以上区间的箱线图
p_high <- ggplot(plot_data[plot_data$value > 2800,], aes(x = group, y = value, fill = group)) +
  geom_boxplot(width = 0.6) +
  coord_cartesian(ylim = c(2800, 3200)) +
  labs(x = "", y = "") +
  theme_bw() +
  theme(
    axis.text.y = element_text(color = "#d9230f"),
    legend.position = "none"
  )

# 横向拼接两张图
p_low + p_high + plot_layout(widths = c(3, 1))

内容的提问来源于stack exchange,提问作者Gedara Home

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:09:03