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

如何在R中自定义非等距Y轴标签并调整轴刻度放大重点区域

解决R语言柱状图自定义Y轴刻度及截断放大区域的问题

数据预处理

首先把百分比列从字符串转成数值,方便后续绘图计算:

# 构造数据框
df <- data.frame(
  status = c("Rejected", "Approved", "Rejected", "Approved"),
  count = c(1049, 6621, 1963, 8781),
  pct = c(14, 86, 18, 82), # 去掉%符号转成纯数值
  year = c(2024, 2024, 2023, 2023)
)

方法1:自定义完整Y轴刻度(无截断)

如果不需要截断轴,只是想显示指定的Y轴刻度,直接在scale_y_continuous里同时设置breaks(刻度位置)和labels(刻度标签)即可——你之前只设置了labels没指定breaks,所以刻度位置没变化:

library(ggplot2)

ggplot(df, aes(x = year, y = pct, fill = status)) +
  geom_col(position = "stack") + # 堆叠柱状图匹配你的数据结构
  scale_y_continuous(
    breaks = c(0, 20, 40, 60, 70, 80, 90, 100), # 指定刻度的具体位置
    labels = c("0%", "20%", "40%", "60%", "70%", "80%", "90%", "100%"), # 对应位置的显示标签
    limits = c(0, 100) # 限定Y轴整体范围
  ) +
  labs(title = "各年份审批状态占比", y = "占比", x = "年份") +
  theme_minimal()

方法2:截断Y轴放大60-100%区域

如果要压缩0-60%的区域,重点放大60-100%部分,用ggbreak包的scale_y_break功能,它会保留截断区域的刻度,不会直接隐藏:

library(ggplot2)
library(ggbreak)

ggplot(df, aes(x = year, y = pct, fill = status)) +
  geom_col(position = "stack") +
  scale_y_break(
    breaks = c(60), # 在60的位置设置截断点
    scales = c(1, 3), # 0-60区域缩放比例1,60-100区域缩放比例3(放大3倍),可按需调整
    limits = c(0, 100)
  ) +
  scale_y_continuous(
    breaks = c(0, 20, 40, 60, 70, 80, 90, 100),
    labels = c("0%", "20%", "40%", "60%", "70%", "80%", "90%", "100%")
  ) +
  labs(title = "各年份审批状态占比(放大60-100%区域)", y = "占比", x = "年份") +
  theme_minimal()

关键提示

  • scale_y_continuous的breaks参数是控制刻度位置的核心,必须和labels一一对应才能同时修改刻度位置和显示文本。
  • 直接用scale_y_break(c(0,60))会把0-60的区域完全隐藏,正确做法是只指定一个截断点,并通过scales参数控制不同区域的缩放比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:05:00