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

如何用ggplot2创建移除中间部分的条形图?

关于创建截断坐标轴图表的解决方案

一、图表正式名称

这种截断中间冗余区间、聚焦两端关键数据的图表,正式称为截断坐标轴图(Broken Axis Plot),也叫断裂坐标轴图,核心作用是通过隐藏坐标轴的非关键区间,放大展示数据差异明显的区域细节。

二、ggplot2实现方案

在ggplot2生态中,有现成工具包可实现该效果,无需完全手动绘制:

1. 使用ggbreak包(推荐)

ggbreak是专门为ggplot2打造的截断坐标轴工具,支持x/y轴单段或多段截断,操作便捷:

  • 安装并加载包:
install.packages("ggbreak")
library(ggbreak)
  • 基础示例(模拟你的图表场景,截断y轴中间区间):
library(ggplot2)

# 模拟数据
df <- data.frame(
  group = c("Sample1", "Sample2", "Sample3", "Sample4", "Sample5", "Sample6"),
  value = c(12, 15, 82, 86, 89, 91)
)

# 生成截断y轴的图表
ggplot(df, aes(x = group, y = value)) +
  geom_point(size = 3) +
  geom_line(group = 1) +
  scale_y_break(c(20, 78))  # 指定需要截断的数值区间

该包支持自定义截断线样式、多段截断等,详细用法可在R中运行vignette("ggbreak")查看官方文档。

2. 手动拼接实现(个性化需求)

如果需要完全自定义布局和样式,可通过拆分数据、绘制子图再拼接的方式实现,借助patchwork包完成布局:

library(ggplot2)
library(patchwork)

# 拆分数据为低数值和高数值区间
df_low <- df[df$value < 20, ]
df_high <- df[df$value > 78, ]

# 绘制低数值区域子图(隐藏x轴标签)
p1 <- ggplot(df_low, aes(x = group, y = value)) +
  geom_point(size = 3) +
  geom_line(group = 1) +
  scale_y_continuous(limits = c(8, 20)) +
  theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())

# 绘制高数值区域子图
p2 <- ggplot(df_high, aes(x = group, y = value)) +
  geom_point(size = 3) +
  geom_line(group = 1) +
  scale_y_continuous(limits = c(78, 95))

# 上下拼接两个子图
p1 / p2 + plot_layout(heights = c(1, 3))

这种方式灵活性极强,但需手动处理数据拆分和图表布局细节。

三、教程参考

  • ggbreak包的官方vignette包含多种场景的示例,涵盖单轴/多轴截断、不同几何对象适配等内容,直接在R中运行vignette("ggbreak")即可查看。
  • 搜索“ggplot2 broken axis”可找到Tidyverse社区、RStudio社区的实践案例,覆盖更多个性化实现场景。

内容的提问来源于stack exchange,提问作者Mir Henglin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:25:13