ggplot2中geom_smooth不显示:字符型年份无法转日期如何加趋势线
解决ggplot2中geom_smooth不显示且无需转换日期格式的问题
问题背景
使用ggplot2绘制年份-比例散点图时,geom_smooth()无法显示趋势线,原因是Year列是字符型离散变量,而趋势线需要连续型x变量。不想通过as.Date()转换日期格式,寻求简便解决方案。
解决方案
无需转换为日期格式,只需将年份转换为**数值型(整数)**即可让geom_smooth()正常工作,以下两种方法任选:
方法1:修改原数据的年份类型
直接将字符型的Year转换为整数,后续绘图时x轴自动识别为连续变量:
df <- data.frame(Year = c("2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022"), Proportion = c(46, 51, 48, 66, 60, 73, 61, 73, 60, 68, 74, 65) ) # 将Year转为整数型 df$Year <- as.integer(df$Year) # 绘制带趋势线的图表 graph1 <- ggplot(df, aes(x = Year, y = Proportion)) + geom_point(size = 3, colour = "red2") + labs(x = "Year", y = "Proportion (%)") + theme_classic(base_size = 20) + scale_y_continuous(limits = c(20, 80), breaks = seq(20, 80, by = 10)) + # 添加趋势线,默认是loess平滑,也可指定method="lm"做线性回归 geom_smooth(method = "lm", se = TRUE, color = "blue") graph1
方法2:不修改原数据,在geom_smooth中临时转换
如果不想改动原数据,可在geom_smooth()的aes里单独将Year转为整数:
df <- data.frame(Year = c("2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022"), Proportion = c(46, 51, 48, 66, 60, 73, 61, 73, 60, 68, 74, 65) ) # 绘制带趋势线的图表,原Year保持字符型 graph1 <- ggplot(df, aes(x = Year, y = Proportion)) + geom_point(size = 3, colour = "red2") + labs(x = "Year", y = "Proportion (%)") + theme_classic(base_size = 20) + scale_y_continuous(limits = c(20, 80), breaks = seq(20, 80, by = 10)) + # 在geom_smooth中临时将Year转为整数,指定线性回归趋势线 geom_smooth(aes(x = as.integer(Year)), method = "lm", se = TRUE, color = "blue") graph1
说明
geom_smooth()默认使用loess局部平滑,若需要线性趋势线,添加method="lm"参数即可。se=TRUE会显示趋势线的置信区间,不需要可设为FALSE。
内容的提问来源于stack exchange,提问作者Bob_123
相关产品推荐
相关产品推荐

