如何在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
相关产品推荐
相关产品推荐

