ggplot中geom_abline调用mean(kwhm2)提示变量未找到的问题求助
问题解决方法
错误原因
geom_abline的参数不会自动读取ggplot调用的数据源,你直接写mean(kwhm2)时,R会去全局环境找这个变量,但kwhm2只存在你管道处理后的临时数据框里,所以会报找不到对象的错误。另外你代码里还拼错了变量名(khwm2应该是kwhm2),不过即使改对拼写,环境问题依然存在。
两种可行解决方案
方案一:先保存数据再计算均值
先把处理好的统计数据存成独立变量,再单独计算整体均值,最后传入绘图函数:
# 先预处理并保存数据 summary_data <- data_fbh %>% select(varm_tot, totyta, far1) %>% group_by(far1) %>% summarise(kwhm2 = mean(varm_tot/totyta) * 1000) # 计算所有组的kwhm2均值 overall_avg <- mean(summary_data$kwhm2) # 绘图 ggplot(summary_data, aes(x=far1, y=kwhm2)) + geom_bar(stat="identity", fill="blue") + scale_x_discrete(labels = c("-1940","1941-1960","1961-1970", "1971-1980","1981-1990","1991-2000", "2001-2010","2011-2019")) + labs(x="Byggår", y="kWh/m2") + theme_light() + geom_abline(slope = 0, intercept = overall_avg)
方案二:用geom_hline替代(更简洁)
geom_hline专门用于绘制水平参考线,且支持通过aes()读取ggplot的数据源,直接在绘图流程里计算均值:
data_fbh %>% select(varm_tot, totyta, far1) %>% group_by(far1) %>% summarise(kwhm2 = mean(varm_tot/totyta) * 1000) %>% ggplot(aes(x=far1, y=kwhm2)) + geom_bar(stat="identity", fill="blue") + scale_x_discrete(labels = c("-1940","1941-1960","1961-1970", "1971-1980","1981-1990","1991-2000", "2001-2010","2011-2019")) + labs(x="Byggår", y="kWh/m2") + theme_light() + # 直接基于当前数据计算整体均值并绘制参考线 geom_hline(aes(yintercept = mean(kwhm2)), linetype="dashed", color="red")
内容的提问来源于stack exchange,提问作者Humberto R
相关产品推荐
相关产品推荐

