使用scale_y_break与scale_x_continuous时X轴值重复显示的问题
解决X轴刻度重复显示的问题
问题原因
使用ggbreak的scale_y_break函数时,它会将绘图区域拆分为上下两个独立面板,默认每个面板都会渲染X轴刻度与标签,因此出现重复显示的情况。
解决方法
方法1:通过scale_y_break参数控制X轴显示
直接在scale_y_break中指定仅保留底部X轴和Y轴的显示:
library(ggplot2) library(ggbreak) df <- data.frame(n=c(1,2,3,4,5), ratio=c(1.3,1.5,10,1.2,1.6)) ggplot(df, aes(x=n, y=ratio)) + geom_bar(stat="identity", width=0.75, fill="#2D3250") + scale_x_continuous(labels = as.character(df$n), breaks = df$n) + scale_y_break(c(2, 3), scales = 0.2, space = 0.3, expand = c(0,0), axis = c("y", "x.bottom"))
方法2:通过theme隐藏上方X轴元素
如果方法1不生效,可手动隐藏上方面板的X轴刻度与标签:
ggplot(df, aes(x=n, y=ratio)) + geom_bar(stat="identity", width=0.75, fill="#2D3250") + scale_x_continuous(labels = as.character(df$n), breaks = df$n) + scale_y_break(c(2, 3), scales = 0.2, space = 0.3, expand = c(0,0)) + theme( axis.text.x.top = element_blank(), axis.ticks.x.top = element_blank() )
额外优化建议
你的n是离散类别(1-5),将其转换为因子类型更符合数据逻辑,无需手动设置X轴刻度即可自动显示所有类别:
df$n <- factor(df$n) ggplot(df, aes(x=n, y=ratio)) + geom_bar(stat="identity", width=0.75, fill="#2D3250") + scale_y_break(c(2, 3), scales = 0.2, space = 0.3, expand = c(0,0), axis = c("y", "x.bottom"))
内容的提问来源于stack exchange,提问作者vicey
相关产品推荐
相关产品推荐

