ggplot2修改x/y轴刻度标签后坐标轴消失问题解决方法
问题原因
刻度消失的核心原因是数据类型和标度函数不匹配:你的time、plasma列都是数值型连续变量,强行调用scale_x_discrete()/scale_y_discrete()离散标度时,ggplot无法将连续数值映射到离散刻度规则上,就会出现轴刻度完全不显示的问题。你判断的方向是对的,应该改用连续标度函数实现效果。
可直接运行的修正代码
以下代码可以高度贴合参考图的呈现效果,包括轴单位放在刻度末端、简洁的绘图样式:
library(ggplot2) time <- c(0, 120, 0, 10, 18, 0, 20, 22, 0, 42, 48, 62, 0, 21, 38) ph <- as.factor(c(6, 6, 5.5, 5.5, 5.5, 5.1, 5.1, 5.1, 4.5, 4.5, 4.5, 4.5, 4.3, 4.3, 4.3)) plasma <- c(130, 130, 130, 119, 101, 130, 100,92, 130, 115, 108, 102, 130, 115, 111) lab6 <- c(" ", "pH 6.0", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "") lab5 <- c(" ", " ", " ", " ", "pH 5.5 ", " ", " ", "pH 5.1 ", " ", " ", " ", " ", " ", " ", "") lab4 <- c(" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "pH 4.5 ", " ", " ", "pH 4.3") d <- data.frame(time, ph, plasma, lab6, lab5, lab4) ggplot(d, aes(time, plasma)) + geom_line(aes(colour = ph), linewidth = 0.8) + geom_point(aes(colour = ph), size = 2) + geom_text(nudge_x = -5, nudge_y = -2, aes(label = lab6, colour = ph)) + geom_text(nudge_x = -7, nudge_y = 0, aes(label = lab5, colour = ph)) + geom_text(nudge_x = -8, nudge_y = 0, aes(label = lab4, colour = ph)) + # 用连续标度匹配数值型数据,单位直接作为末端刻度标签 scale_x_continuous(name = NULL, breaks = c(0, 50, 100, 130), labels = c("0", "50", "100", "Hrs"), limits = c(0, 130), expand = c(0.01, 0)) + scale_y_continuous(name = NULL, breaks = c(60, 80, 100, 120, 130), labels = c("60", "80", "100", "120", "me/l"), limits = c(88, 135), expand = c(0.01, 0)) + # 匹配参考图的简洁无网格样式 theme_classic() + # 去掉多余的图例(参考图直接在线条旁标注pH值,不需要图例) theme(legend.position = "none")
关键修改说明
- 替换离散标度为
scale_x_continuous()/scale_y_continuous(),匹配连续数值的数据类型,从根源解决刻度消失问题 - 把默认轴标题设为
NULL,直接将单位文本(Hrs/me/l)设置为轴末端刻度的标签,完美复现参考图里单位放在刻度端点的效果,不需要额外添加注释层 - 增加
theme_classic()去掉默认背景网格,隐藏多余图例,调整轴范围和边距让元素布局更贴合参考图样式
内容的提问来源于stack exchange,提问作者asellus
相关产品推荐
相关产品推荐

