如何并排绘制两个Q-Q Plot并添加qqline,解决grid.arrange报错问题
R语言Q-Q图并排展示与添加参考线解决方法
报错原因说明
grid.arrange属于gridExtra包的功能,仅支持排列grid图形体系的对象(比如ggplot2生成的绘图对象)。基础R的qqplot()生成的是base R绘图对象,赋值后返回的仅为散点坐标数据,不是可复用的绘图对象,因此无法直接传入grid.arrange排列。
注:你当前的qqplot()代码是绘制lifeExp和year两个变量的分布对比Q-Q图,如果你是要验证lifeExp是否符合正态分布,应该使用qqnorm()函数绘制单样本正态Q-Q图,对应添加qqline()参考线即可判断正态性。
方案1:基础R绘图实现(无需额外包)
通过设置画布布局参数直接实现并排展示,同时添加参考线:
# 设置1行2列的画布布局 par(mfrow = c(1, 2)) # 绘制美洲区域对比Q-Q图+参考线 qqplot(AmericasLifeExp$lifeExp, AmericasLifeExp$year, xlab = "预期寿命", ylab = "年份", main = "美洲区域Q-Q图") # 双样本Q-Q图参考线取斜率1、截距0即可 abline(a = 0, b = 1, col = "red", lwd = 2) # 绘制欧洲区域对比Q-Q图+参考线 qqplot(EuropeLifeExp$lifeExp, EuropeLifeExp$year, xlab = "预期寿命", ylab = "年份", main = "欧洲区域Q-Q图") abline(a = 0, b = 1, col = "red", lwd = 2) # 绘图完成后重置画布参数,避免影响后续绘图 par(mfrow = c(1, 1))
如果是做单样本正态性检验的Q-Q图,代码调整为:
par(mfrow = c(1,2)) # 美洲预期寿命正态Q-Q图 qqnorm(AmericasLifeExp$lifeExp, xlab = "理论分位数", ylab = "预期寿命", main = "美洲预期寿命正态Q-Q图") qqline(AmericasLifeExp$lifeExp, col = "red", lwd =2) # 欧洲预期寿命正态Q-Q图 qqnorm(EuropeLifeExp$lifeExp, xlab = "理论分位数", ylab = "预期寿命", main = "欧洲预期寿命正态Q-Q图") qqline(EuropeLifeExp$lifeExp, col = "red", lwd =2) par(mfrow = c(1,1))
方案2:ggplot2+grid.arrange实现
如果你需要和其他ggplot对象组合,可切换为ggplot2体系绘图,再用grid.arrange排列:
首先加载所需包:
library(ggplot2) library(gridExtra)
双样本分布对比Q-Q图代码:
# 美洲区域Q-Q图 qq_americas <- ggplot() + geom_point(aes(x = sort(AmericasLifeExp$lifeExp), y = sort(AmericasLifeExp$year))) + geom_abline(slope = 1, intercept = 0, color = "red", linewidth =1) + labs(x = "预期寿命", y = "年份", title = "美洲区域Q-Q图") + theme_minimal() # 欧洲区域Q-Q图 qq_europe <- ggplot() + geom_point(aes(x = sort(EuropeLifeExp$lifeExp), y = sort(EuropeLifeExp$year))) + geom_abline(slope = 1, intercept = 0, color = "red", linewidth =1) + labs(x = "预期寿命", y = "年份", title = "欧洲区域Q-Q图") + theme_minimal() # 并排排列 grid.arrange(qq_americas, qq_europe, nrow = 1)
单样本正态性检验Q-Q图代码更简单,ggplot2内置了对应图层:
qq_americas <- ggplot(AmericasLifeExp, aes(sample = lifeExp)) + geom_qq() + geom_qq_line(color = "red", linewidth = 1) + labs(x = "理论分位数", y = "预期寿命", title = "美洲预期寿命正态Q-Q图") + theme_minimal() qq_europe <- ggplot(EuropeLifeExp, aes(sample = lifeExp)) + geom_qq() + geom_qq_line(color = "red", linewidth = 1) + labs(x = "理论分位数", y = "预期寿命", title = "欧洲预期寿命正态Q-Q图") + theme_minimal() grid.arrange(qq_americas, qq_europe, nrow =1)
从你提供的Q-Q图分布来看,散点明显偏离参考线,可判断预期寿命数据不符合正态分布。
内容的提问来源于stack exchange,提问作者Coco Garazzo
相关产品推荐
相关产品推荐

