ggplot离散X轴首尾存在间隙,scale_x_discrete无法解决
解决趋势线前后间隙问题的方案
问题根源在于你将Day设为字符型导致X轴为离散型,geom_smooth的线性拟合无法延伸到轴的两端,同时离散轴的默认padding也会加剧间隙。以下是具体修复步骤:
将
Day转换为数值型
先把字符型的Day转回数值,这样可以用连续轴精准控制刻度和间隙:N2O_Methylocella$Day <- as.numeric(N2O_Methylocella$Day)修正绘图代码
- 移除
geom_smooth中错误的group="Amendment"(字符串形式的分组无效,且分面后每个子图已自动按Amendment独立分组) - 使用
scale_x_continuous指定你需要的刻度点,并通过expand=c(0,0)消除轴两端的空白padding - 把
scale_fill_npg改为scale_color_npg(你的映射是colour=Amendment而非fill,原代码的填充色映射未生效)
- 移除
修正后的完整代码:
plot <- ggplot(N2O_Methylocella[!is.na(N2O_Methylocella$Day), ], aes(x = Day, y = N2O, colour = Amendment)) + geom_point(size = 1, alpha = 1) + geom_smooth(method = lm, level = 0.95) + facet_grid(Amendment ~ ., switch = "both") + xlab("Day") + ylab(expression(phantom()*"Total "*N[2]*"O Production (%)")) + ggtitle(my_title) + scale_color_npg(alpha = 0.8) + guides(colour = FALSE, size = FALSE) + scale_x_continuous(breaks = c(0, 1, 3, 7, 10), expand = c(0, 0)) + theme(text=element_text(size=24), panel.grid.minor = element_blank())
这样处理后,趋势线会完全延伸到第一个和最后一个数据点,同时X轴只会显示你指定的天数,不会出现多余日期。
内容的提问来源于stack exchange,提问作者hank00000
相关产品推荐
相关产品推荐

