Skip to main content

qmplot:为 PLINK 关联输出(或任何具有染色体、位置和 p 值的数据框)创建高质量的曼哈顿和 QQ 图。

项目描述

QMplot:一个 Python 工具,用于根据 GWAS 结果创建高质量的曼哈顿和 QQ 图。

图片

qmplot是一个方便的、用户友好的工具和 Python 库,它允许直接从 PLINK 关联结果文件或任何包含染色体名称、染色体位置、P 值和可选列的数据框快速灵活地发布准备就绪的曼哈顿和 QQ 图SNP 名称(例如 dbSNP 中的 rsID)。

这个库的灵感来自 r-qqman,但它比r-qqman更方便的是染色体名称列不必再是数字,这意味着您可以保留染色体的原始名称而不必隐蔽的 X、Y、MT 等为 23、24、25 等。

依赖项

qmplot 支持 Python 3.6+,不再支持 Python 2。

安装需要numpyscipypandasmatplotlib

安装

qmplot由 Python 编写并在 PyPI 中发布。可以通过运行以下命令来安装最新的稳定版本:

pip install qmplot

快速开始

我们使用目录中的 PLINK2.x 关联输出数据“ gwas_plink_result.tsvtests/data作为下图的输入。这是“gwas_plink_result.tsv”的格式预览:


#CHROM POS ID REF ALT A1 TEST OBS_CT BETA SE T_STAT P


1 904165 1_904165 GAA 添加 282 -0.0908897 0.195476 -0.464967 0.642344

1 1563691 1_1563691 TGG 添加 271 0.447021 0.422194 1.0588 0.290715

1 1707740 1_1707740 TGG 添加 283 0.149911 0.161387 0.928888 0.353805

1 2284195 1_2284195 TCC 添加 275 -0.024704 0.13966 -0.176887 0.859739

1 2779043 1_2779043 TCT 添加 272 -0.111771 0.139929 -0.79877 0.425182

1 2944527 1_2944527 GAA 添加 276 -0.054472 0.166038 -0.32807 0.743129

1 3803755 1_3803755 TCT 添加 283 -0.0392713 0.128528 -0.305547 0.760193

1 4121584 1_4121584 AGG ADD 279 0.120902 0.127063 0.951511 0.342239

1 4170048 1_4170048 CTT 加 280 0.250807 0.143423 1.74873 0.0815274

qmplot应用两种方式生成曼哈顿图和 QQ 图:

1.命令行选项

如果您已经有 PLINK2.x 关联输出,这是绘制曼哈顿和 QQ 图的最简单方法。您可以直接键入qmplot --help 并会找到以下所有选项:

usage: qmplot [-h] -I INPUT -O OUTPREFIX [-T TITLE] [-P SIGN_PVALUE] [-M M_ID]
          [--open-gui]

qmplot: Creates high-quality manhattan and QQ plots from PLINK association
output (or any dataframe with chromosome, position, and p-value).

optional arguments:
  -h, --help            show this help message and exit
  -I INPUT, --input INPUT
                        Input file
  -O OUTPREFIX, --outprefix OUTPREFIX
                        The prefix of output file
  -T TITLE, --title TITLE
                        Title of figure
  -P SIGN_PVALUE, --sign-mark-pvalue SIGN_PVALUE
                        Genome wide significant p-value sites. [1e-6]
  -M M_ID, --top-sign-signal-mark-id M_ID
                        A string denoting the column name for which you want
                        to annotate the Top Significant SNPs. Default: "ID"(PLINK2.x)
  --display             Set to be GUI backend, which can show the figure.

以下命令将为您提供两个分辨率为 300 dpi 的 png 图:

$ qmplot -I data/gwas_plink_result.tsv -T Test -M ID --dpi 300 -O test

曼哈顿情节如下:

QQ图如下:

注意:您只能通过qmplot命令行选项修改绘图,当您想要进行更多更改时,这是一个很大的限制。

2.Python库

这是最灵活的方式。您可以在 Python 代码中使用 qmplot 作为库,并根据您的想法创建绘图。

具有默认参数的曼哈顿图

qmplot中的manhattanplot()函数采用数据框,其列包含染色体名称/id、染色体位置、P 值和可选的 SNP 名称(例如 dbSNP 中的 rsID)。

默认情况下,manhattanplot()根据 plink2 关联结果查找与 outout 对应的列名,即“#CHROM”、“POS”、“P”和“ID”,尽管用户可以指定不同的列名。使用 GWAS 数据框调用manhattanplot()函数作为单个参数绘制一个基本的曼哈顿图,默认为深蓝色和浅蓝色配色方案。

import pandas as pd
import matplotlib.pyplot as plt
from qmplot import manhattanplot

if __name__ == "__main__":

    df = pd.read_table("tests/data/gwas_plink_result.tsv", sep="\t")
    df = df.dropna(how="any", axis=0)  # clean data

    # generate manhattan plot and set an output file.
    ax = manhattanplot(data=df)
    plt.savefig("output_manhattan_plot.png")

通过设置旋转 x 轴刻度标签xticklabel_kws以避免标签重叠:

ax = manhattanplot(data=df,
                   # set vertical or any other degrees as you like.
                   xticklabel_kws={"rotation": "vertical"})

或者通过设置将标签旋转 45 度 xticklabel_kws={"rotation": 45}

当使用默认参数运行时,该manhattanplot()函数在 $-log_{10}{(10^{-5})}$ 处绘制水平线,用于“暗示性”关联和 $-log_{10}{(5×10^{- 8})}$ 用于“全基因组显着”阈值。suggestiveline这些可以移动到不同的位置,或者分别使用参数和完全关闭genomewideline

ax = manhattanplot(data=df,
                   suggestiveline=None,  # Turn off suggestiveline
                   genomewideline=None,  # Turn off genomewideline
                   xticklabel_kws={"rotation": "vertical"},
                   is_show=True)  # display the plot in screen

manhattanplot当仅使用单个染色体的结果时,函数的行为会略有变化。在这里,不是在 x 轴上绘制交替的颜色和染色体 ID,而是在 x 轴上绘制 SNP 在染色体上的位置:

# plot only results of chromosome 8.
manhattanplot(data=df, CHR="chr8", xlabel="Chromosome 8")
plt.savefig("output_chr8_manhattan_plot.png")

manhattanplot()funcion 能够突出显示具有显着 GWAS 信号的 SNP 并注释具有最低 P 值的 Top SNP:

ax = manhattanplot(data=df,
                   sign_marker_p=1e-6,  # highline the significant SNP with ``sign_marker_color`` color.
                   is_annotate_topsnp=True,  # annotate the top SNP
                   xticklabel_kws={"rotation": "vertical"})

此外,突出显示感兴趣的 SNP 可以与限制为单个染色体相结合,以使“放大”到包含感兴趣的 SNP 的特定区域。

一个更好的曼哈顿情节的例子

可以将更多图形参数传递给manhattanplot() 函数来控制绘图标题、点字符、大小、颜色等。下面是示例:

import pandas as pd
from qmplot import manhattanplot

if __name__ == "__main__":

    # loading data from local file
    df = pd.read_table("tests/data/gwas_plink_result.tsv", sep="\t")
    df = df.dropna(how="any", axis=0)  # clean data

    # defined the plot style
    f, ax = plt.subplots(figsize=(12, 4), facecolor='w', edgecolor='k')
    xtick = set(['chr' + i for i in list(map(str, range(1, 10))) + ['11', '13', '15', '18', '21', 'X']])
    manhattanplot(data=data,
                  marker=".",
                  sign_marker_p=1e-6,  # Genome wide significant p-value
                  sign_marker_color="r",
                  snp="ID",

                  title="Test",
                  xtick_label_set=xtick,
                  xlabel="Chromosome",
                  ylabel=r"$-log_{10}{(P)}$",

                  sign_line_cols=["#D62728", "#2CA02C"],
                  hline_kws={"linestyle": "--", "lw": 1.3},

                  is_annotate_topsnp=True,
                  ld_block_size=500000,  # 500000 bp
                  text_kws={"fontsize": 12,  # The fontsize of annotate text
                            "arrowprops": dict(arrowstyle="-", color="k", alpha=0.6)},
                  ax=ax)
    plt.savefig("better.manhattan.png")

manhattanplot?通过在 IPython 控制台中键入来查找有关参数的更多详细信息。

带默认参数的 QQ 图

qqplot()函数可用于生成 QQ 图,以可视化关联“P 值”的分布。该qqplot()函数将 P 值向量作为其唯一需要的参数。

import pandas as pd
from qmplot import qqplot

if __name__ == "__main__":

    df = pd.read_table("tests/data/gwas_plink_result.tsv", sep="\t")
    df = df.dropna(how="any", axis=0)  # clean data
    ax = qqplot(data=df["P"])

更好的QQ情节

可以传递更多图形参数qqplot()来控制绘图标题、轴标签、点字符、颜色、点大小等。下面是示例:

import pandas as pd
import matplotlib.pyplot as plt
from qmplot import qqplot

if __name__ == "__main__":
    df = pd.read_table("tests/data/gwas_plink_result.tsv", sep="\t")
    df = df.dropna(how="any", axis=0)  # clean data

    # Create a Q-Q plot
    f, ax = plt.subplots(figsize=(6, 6), facecolor="w", edgecolor="k")
    qqplot(data=data["P"],
           marker="o",
           title="Test",
           xlabel=r"Expected $-log_{10}{(P)}$",
           ylabel=r"Observed $-log_{10}{(P)}$",
           ax=ax)

    plt.savefig("test.QQ.png")

qqplot?通过在 IPython 控制台中键入来查找有关参数的更多详细信息。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

qmplot-0.3.2.tar.gz (27.1 kB 查看哈希

已上传 source