You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何并排绘制两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:15:07