输入文件为GEMMA进行GWAS的结果文件(参数设置请参考官方说明书)
#############################################
################## R代码 ####################
#############################################
#绘图
# 清空环境变量
rm(list = ls())
# 设置工作目录
setwd("/home/wzy/gemma/output/")
# 加载必要的包
library(CMplot)
library(dplyr)
# 获取当前目录下所有扩展名为 .assoc.txt 的文件(包括完整路径)
files <- list.files(pattern = "\\.assoc\\.txt$", full.names = TRUE)
# 定义处理单个文件并绘图的函数
process_file <- function(file) {
# 读取数据(假设数据以空格或制表符分隔,且包含表头)
data <- read.table(file, header = TRUE)
# 选择指定的列(第2,1,3,12列),请确认这4列为所需数据
data <- data[, c(2, 1, 3, 12)]
# 过滤数据:去除“chr”列中等于23的记录
# 如果你的数据中第二列的名称不是 "chr",请改为正确的列名
data <- data %>% filter(chr != 23)
# 提取文件基本名称(不带路径和扩展名)
file_name <- tools::file_path_sans_ext(basename(file))
# 定义输出文件前缀,保存到当前工作目录
manhattan_prefix <- paste0(file_name, "_manhattan")
qq_prefix <- paste0(file_name, "_qq")
## 绘制曼哈顿图,使用 CMplot 内置输出功能 ##
CMplot(data,
plot.type = "m",
col = c("skyblue", "gray80"),
cex = 0.9,
LOG10 = TRUE,
multracks = FALSE,
threshold = c(5e-8, 1e-6),
threshold.lty = c(1, 2),
threshold.lwd = c(1, 1),
threshold.col = c("red", "grey"),
amplify = TRUE,
file = "tiff", # 输出格式为 TIFF
dpi = 500,
signal.cex = c(1, 1),
signal.col = c("red", "green"),
file.output = TRUE,
file.name = manhattan_prefix)
## 绘制 QQ 图 ##
# 计算 λ(lambda)值:利用 p_wald 列计算 Z 值,再取中位数
p_value <- data$p_wald
z <- qnorm(p_value / 2)
lambda <- round(median(z^2, na.rm = TRUE) / 0.454, 3)
CMplot(data,
plot.type = "q",
conf.int.col = NULL,
box = TRUE,
file = "tiff",
main = paste("λ =", lambda),
dpi = 500,
file.output = TRUE,
file.name = qq_prefix,
verbose = FALSE)
cat("Processed file:", file, "\n")
}
# 遍历所有文件进行处理
lapply(files, process_file)
只绘制一个曼哈顿图和QQ图,使用以下R代码(这里输入文件以GMATs的GWAS结果文件为例)
#设置工作路径
setwd("/home/wzy/geno/GMATs/")
data <- read.table("adg.0_12848070.res", header = T)
data=data[,c(3,2,5,13)]
#加载R包
library(CMplot)
##曼哈顿图
CMplot(data,
plot.type = "m",
col = c("skyblue", "gray80"),
cex = 0.9,
LOG10 = TRUE,
multracks = FALSE,
threshold = 5e-8,
threshold.lty = 1,
threshold.lwd = 1,
threshold.col = "red",
amplify = TRUE,
file = "tiff", # 输出格式为 TIFF
dpi = 500,
signal.cex = 1,
signal.col = "red",
file.output = TRUE,
#file.name = manhattan_prefix
)
#计算膨胀系数
p_value <- data$p
z <- qnorm(p_value / 2)
lambda <- round(median(z^2, na.rm = TRUE) / 0.454, 3)
##绘制QQ图
CMplot(data,
plot.type = "q",
conf.int.col = NULL,
box = TRUE,
file = "tiff",
main = paste("λ =", lambda),
dpi = 500,
file.output = TRUE,
#file.name = qq_prefix,
verbose = FALSE)