R包-cMplot

用来绘制曼哈顿图和QQ图。除了正常的曼哈顿图,还可以画环形的曼哈顿图。

github官网

1. 安装与加载

CMplot是一个成熟的 R 语言包,可以直接通过 CRAN 安装:

1
2
3
4
# 安装
install.packages("CMplot")
# 加载
library(CMplot)

2. 准备数据

CMplot对输入数据格式有明确要求,通常是一个数据框(dataframe):

  • 第 1 列:SNP 名称(如 rs 编号)。
  • 第 2 列:染色体编号(Chromosome,支持数字或 X/Y)。
  • 第 3 列:SNP 物理位置(Position)。
  • 后续列:对应的 P 值(可以是单性状或多性状)。

包内自带了示例数据集 pig60Kcattle50K,你可以直接加载查看格式:

1
2
data(pig60K)
head(pig60K)

3. 绘制曼哈顿图 (Manhattan Plot)

双阈值_存在SNP密度图

通过设置 plot.type="m"来绘制常规的曼哈顿图。常用参数包括设置阈值线、颜色等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CMplot(
pig60K[, 1:4], # 输入数据:数据框,第1列SNP名,第2列染色体,第3列物理位置,第4列P值
plot.type = "m", # 绘图类型:"m" 表示 Manhattan plot(曼哈顿图)
LOG10 = TRUE, # 是否将 P 值转换为 -log10(P) 尺度:TRUE 表示转换
ylim = NULL, # Y轴范围:NULL 表示根据数据自动适应,也可设为 c(min, max)
threshold = c(1e-6, 1e-4), # 显著性阈值:可设置多个阈值线(如全基因组显著和 suggestive 阈值)
threshold.lty = c(1, 2), # 阈值线类型:1=实线,2=虚线
threshold.lwd = c(1, 1), # 阈值线宽度:控制线条粗细
threshold.col = c("black", "grey"), # 阈值线颜色
amplify = TRUE, # 是否放大显著点:TRUE 表示大于最小显著性水平的点会被放大
bin.size = 1e6, # 窗口大小(bp):用于计算 SNP 密度的窗口大小(1 Mb)
chr.den.col = c("darkgreen", "yellow", "red"), # 染色体密度颜色:从低密度到高密度的渐变色
signal.col = c("red", "green"), # 显著点颜色:分别对应不同阈值线上的显著点颜色
signal.cex = c(1.5, 1.5), # 显著点大小:放大后的点尺寸
signal.pch = c(19, 19), # 显著点形状:19 表示实心圆点
file = "png", # 输出文件格式:可选 "jpg", "pdf", "tiff", "png"
file.name = "manhattan", # 输出文件名:结合 plot.type 生成最终文件名;多个性状则提供多个名称
dpi = 300, # 图片分辨率:适用于 jpg, tiff, png 格式
file.output = TRUE,# 是否输出文件:TRUE 表示保存图片到本地
verbose = TRUE, # 是否打印运行日志信息
width = 14, # 输出图片的宽度(英寸)
height = 6 # 输出图片的高度(英寸)
)

输出结果为 Rect_Manhtn.manhattan.png ,设定的 file.name 其实是文件名的主体,如下图。图中下面是SNP密度(默认是计算1MB的位点数目),右上的图标就是密度的颜色渐变指示。

双阈值-无密度条图

CMplot中,SNP 密度图是由 chr.den.col控制的

只要 不设置 chr.den.col,并把 bin.size去掉,就不会画密度条。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CMplot(
pig60K[, 1:4],
plot.type = "m",
LOG10 = TRUE,
ylim = NULL,
threshold = c(1e-6, 1e-4),
threshold.lty = c(1, 2),
threshold.lwd = c(1, 1),
threshold.col = c("black", "grey"),
amplify = TRUE,
signal.col = c("red", "green"),
signal.cex = c(1.5, 1.5),
signal.pch = c(19, 19),
file = "png",
file.name = "manhattan",
dpi = 300,
file.output = TRUE,
verbose = TRUE,
width = 14,
height = 6
)

单阈值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CMplot(
pig60K[, 1:4], # 输入数据:数据框,第1列SNP名,第2列染色体,第3列物理位置,第4列P值
plot.type = "m", # 绘图类型:"m" 表示 Manhattan plot(曼哈顿图)
LOG10 = TRUE, # 是否将 P 值转换为 -log10(P) 尺度:TRUE 表示转换
ylim = NULL, # Y轴范围:NULL 表示根据数据自动适应,也可设为 c(min, max)
threshold = 1e-6, # 显著性阈值:设置全基因组显著性水平线(如 Bonferroni 校正后的值)
threshold.lty = 1, # 阈值线类型:1 表示实线(solid)
threshold.lwd = 1, # 阈值线宽度:控制线条粗细
threshold.col = "black", # 阈值线颜色:设置为黑色
amplify = TRUE, # 是否放大显著点:TRUE 表示大于阈值线的点会被放大显示
signal.col = "red", # 显著点颜色:放大后的显著点显示为红色
signal.cex = 1.5, # 显著点大小:控制放大后点的尺寸
signal.pch = 19, # 显著点形状:19 表示实心圆点
file = "png", # 输出文件格式:可选 "jpg", "pdf", "tiff", "png"
file.name = "manhattan", # 输出文件名:结合 plot.type 生成最终文件名
dpi = 300, # 图片分辨率:适用于 jpg, tiff, png 格式
file.output = TRUE,# 是否输出文件:TRUE 表示保存图片到本地
verbose = TRUE, # 是否打印运行日志信息
width = 14, # 输出图片的宽度(英寸)
height = 6 # 输出图片的高度(英寸)
)

4. 绘制 QQ 图 (QQ Plot)

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CMplot(
pig60K[, 1:4], # 输入数据:第1列SNP名,第2列染色体,第3列物理位置,第4列P值
plot.type = "q", # 绘图类型:"q" 表示 Q-Q plot(QQ图)
box = TRUE, # 是否绘制图形边框:FALSE 表示不绘制, TRUE 表示绘制
file = "png", # 输出文件格式:可选 "jpg", "pdf", "tiff", "png"
file.name = "QQ",# 输出文件名(结合 plot.type 生成,为 QQplot.QQ.png)
dpi = 300, # 输出图片的分辨率(适用于 jpg, tiff, png)
conf.int = FALSE,# 是否在 QQ 图中绘制置信区间:FALSE 表示不绘制
threshold.col = "red", # 阈值线的颜色(此处用于控制 QQ 图对角线颜色)
threshold.lty = 1, # 阈值线的类型:1 表示实线(solid)
col = "blue", # 点的颜色:设置 QQ 图中散点的颜色为蓝色
main = "", # 主标题:设置为空字符串以去除标题
axis.cex = 0.8, # 坐标轴刻度标签(数字)的大小:0.8 表示缩小显示
lab.cex = 0.8, # 坐标轴标题(如 -log10(P))的大小:0.8 表示缩小显示
file.output = TRUE, # 是否输出文件:TRUE 表示保存到本地
verbose = TRUE, # 是否打印运行日志信息
width = 5, # 输出图片的宽度(英寸)
height = 5 # 输出图片的高度(英寸)
)

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2026 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信