stat_cor报错:transform_date仅支持Date类,温度相关性图表求助
解决ggplot添加stat_cor时的
transform_date()报错问题 报错原因
你的代码报错根源在于:全局ggplot的初始映射设置了aes(Date, NULL),当你添加stat_cor时,它会默认继承这个全局x轴映射(x=Date),试图把数值型的mean_temps4当作Date类型处理,从而触发transform_date()的类型不匹配错误。
解决方案
提供两种可行的修复方式:
方法1:移除全局错误映射,单独指定各图层的aes
修改初始ggplot的调用,不设置全局x/y映射,让每个图层单独定义自己的映射关系:
library(ggpubr) S4TailGaugeDailyAvgPlot <- ggplot(S4TailGaugeDailyAvgdf) + # 此处不设置全局x/y映射 geom_smooth(aes(x = Date, y = mean_temps4), alpha = 0.25) + geom_line(aes(x = Date, y = mean_temps4, color = "S4")) + geom_smooth(aes(x = Date, y = mean_temptailwater, colour = "Tailwater Gauge"), alpha = 0.25) + geom_line(aes(x = Date, y = mean_temptailwater, colour = "Tailwater Gauge")) + scale_colour_manual("",values = c("S4"="blue", "Tailwater Gauge"="red")) + theme(legend.position = "bottom") + xlab('Date') + ylab('Daily Average Temperature (Celcius)') + ggtitle("Daily Average Temperature Site S4 vs Tailwater Gauge") # 添加相关性标注,明确指定x/y变量 S4TailGaugeDailyAvgPlot + stat_cor(aes(x = mean_temps4, y = mean_temptailwater), method = "spearman")
方法2:在stat_cor中关闭映射继承
如果不想修改原有图表代码,只需在stat_cor中添加inherit.aes = FALSE,阻止它继承全局的错误映射:
# 保留你原来的S4TailGaugeDailyAvgPlot代码,修改stat_cor调用 S4TailGaugeDailyAvgPlot + stat_cor(aes(x = mean_temps4, y = mean_temptailwater), method = "spearman", inherit.aes = FALSE) # 关键参数:禁用全局映射继承
说明
两种方法的核心都是让stat_cor使用正确的数值型变量(mean_temps4和mean_temptailwater)计算相关性,而不是错误地使用Date类型的x轴映射。
内容的提问来源于stack exchange,提问作者Matt Schaaf
相关产品推荐
相关产品推荐

