为什么我使用R的ggplot2绘制散点图时趋势线无法显示?
问题原因
你将color=Country放在了ggplot()的全局美学映射中,这会让所有图层默认按Country分组拟合趋势线。你提供的数据集里每个国家仅对应1条观测记录,而线性回归至少需要2个数据点才能完成拟合,因此趋势线无法生成显示。
解决方法
方案1:绘制全局总趋势线
如果只需要全数据集的一条整体趋势线,将color=Country从全局映射移到geom_point()的独立映射中,仅让散点按国家区分颜色即可:
ggplot(df_scatter, aes(x = new_cases, y = people_fully_vaccinated)) + geom_point(aes(color = Country)) + geom_smooth(method = "lm") # 不需要显示置信区间可在geom_smooth中加参数 se = FALSE
方案2:绘制分国家的趋势线
如果需要每个国家对应的单独趋势线,你需要更换包含每个国家多条观测记录的明细数据集,当前的聚合数据集每个国家仅1条数据,无法实现分国家拟合。
可选优化:过滤异常值
数据中以色列对应的new_cases为负值属于异常值,若要避免其影响趋势线拟合效果,可先过滤异常值再绘图:
library(dplyr) df_scatter %>% filter(new_cases > 0) %>% ggplot(aes(x = new_cases, y = people_fully_vaccinated)) + geom_point(aes(color = Country)) + geom_smooth(method = "lm")
内容的提问来源于stack exchange,提问作者kaix
相关产品推荐
相关产品推荐

