如何用R为Control、QA-PBS、QA-iPSC三组绘制QQ图?
给R语言分组绘制QQ图的解决方案
嗨,刚学R就着手处理作业里的QQ图问题,完全能理解你的困惑!我会给你两种实用的方法,分别用基础R和ggplot2包来实现三个组的QQ图绘制,都很适合新手上手。
首先先确认你的数据结构没问题,你提供的Data是标准的长格式数据,非常适合分组可视化。
方法1:用基础R绘制分组QQ图
基础R自带的qqnorm()和qqline()函数就能完成任务,我们只需要先把数据按分组拆分,再批量绘图:
- 先按
group列拆分数据,把每个组的crossovers值单独提取出来:
# 拆分数据为列表,每个元素对应一个组的crossovers数据 data_groups <- split(Data$crossovers, Data$group)
- 设置画布布局,把三个QQ图放在同一行:
# 将画布设置为1行3列,方便同时展示三个组的图 par(mfrow = c(1, 3))
- 循环遍历每个组,绘制QQ图和参考线:
for (group_name in names(data_groups)) { # 绘制QQ点图,标题包含组名 qqnorm(data_groups[[group_name]], main = paste("QQ Plot -", group_name)) # 添加红色的参考线,帮助判断正态性 qqline(data_groups[[group_name]], col = "red") } # 恢复画布的默认布局(避免影响后续绘图) par(mfrow = c(1, 1))
方法2:用ggplot2绘制更美观的分组QQ图
如果你想让图更美观、更易调整格式,推荐用tidyverse生态里的ggplot2包,它对长格式数据的支持非常友好:
- 先加载ggplot2包(如果没安装的话,先运行
install.packages("ggplot2")):
library(ggplot2)
- 一行代码完成分组QQ图绘制:
ggplot(Data, aes(sample = crossovers)) + geom_qq() + # 绘制QQ点 geom_qq_line(color = "red") + # 添加正态参考线 facet_wrap(~ group) + # 按group列自动分面,每个组一个子图 labs( title = "QQ Plots by Treatment Group", x = "Theoretical Quantiles", y = "Sample Crossovers" ) + theme_bw() # 用简洁的黑白主题
这段代码会自动帮你把三个组的QQ图排列好,而且后续调整颜色、字体、布局都很方便。
小提示:你的crossovers是计数型数据,QQ图主要用来检验数据是否符合正态分布,如果后续需要做统计检验,可能还要结合Shapiro-Wilk检验等方法哦。
内容的提问来源于stack exchange,提问作者FolateDeficiency
相关产品推荐
相关产品推荐

