R ggplot2指定代码运行后geom_text显示在geom_point、geom_line下层的问题
问题原因
ggplot2的图层渲染顺序遵循代码编写顺序,先定义的图层位于下层,后定义的图层位于上层。你当前代码先定义了geom_text,之后才定义geom_line和geom_point,因此线和点会覆盖在文本上层,导致文字被遮挡。
修复方案
将geom_text的代码挪到所有几何图层的最后即可,同时注意你代码中存在一处小问题:Sepal.Length是连续变量,原代码用scale_x_discrete会导致X轴显示异常,建议替换为scale_x_continuous。
修复后的完整代码如下:
library(ggplot2) library(scales) # trans_breaks、trans_format函数依赖该包,需提前加载 p <- ggplot(iris, aes(Sepal.Length, Petal.Length, group = Species, color = Species)) + geom_line(size = 1.25) + geom_point(size = 2.25) + # geom_text移至所有几何图层的最后,保证位于最上层 geom_text(aes(y = Petal.Length, x = Sepal.Length, label = Petal.Length), inherit.aes = FALSE) + theme_bw(base_size = 14) + theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "right") + scale_x_continuous(breaks = waiver()) + scale_y_continuous(trans='log10', breaks=trans_breaks('log10', function(x) 10^x), labels=trans_format('log10', math_format(10^.x)) ) + ylab("Petal.Length (logarithmic scale)") p
可选优化
如果希望避免文本和点完全重叠影响可读性,可以给geom_text添加nudge_y参数让文本小幅向上偏移,示例:geom_text(aes(y = Petal.Length, x = Sepal.Length, label = Petal.Length), inherit.aes = FALSE, nudge_y = 0.03)
内容的提问来源于stack exchange,提问作者Aku-Ville Lehtimäki
相关产品推荐
相关产品推荐

