如何绘制跨基因组坐标的 log2 倍数变化(使用 Deseq2 输出 csv)

How can I plot log2 fold-change across genome coordinates (using Deseq2 output csv)

我有来自细菌基因组的 RNA-seq 数据(针对 2 种不同的处理重复 3 次),并使用 DeSeq2 计算了基因的 log2fc (padj < 0.05)。这会生成一个 csv 文件,其中包括(但不限于)基因名称和 log2fcexample of output.

更新:基因组已经发表并注释了,所以我有每个基因对应的基因组坐标。也许就像合并这些信息一样简单。但并不是所有的基因都是差异表达的,所以就比较复杂了...

但是,我想记录 2 RNA 变化(y 轴)与基因组坐标(x 轴)。但是我在互联网上搜索没有成功。有谁知道一个相对简单的方法来做到这一点?我很高兴使用 R/python...我已经包含了一篇论文中的示例以说明我所追求的...example of what I'm after

也许这就是为什么没有人谈论它的原因。但是在我附上的图片中,他们没有讨论他们是如何绘制的。

提前致谢!!

让我们用一个例子来获得 DESeq2 结果:

library(DESeq2)
library(zebrafishRNASeq)
data(zfGenes)

head(zfGenes)
                   Ctl1 Ctl3 Ctl5 Trt9 Trt11 Trt13
ENSDARG00000000001  304  129  339  102    16   617
ENSDARG00000000002  605  637  406   82   230  1245
ENSDARG00000000018  391  235  217  554   451   565
ENSDARG00000000019 2979 4729 7002 7309  9395  3349

dds = DESeqDataSetFromMatrix(zfGenes[rowMeans(zfGenes)>30,],
data.frame(grp=gsub("[0-9]*","",colnames(zfGenes))),~grp)
dds = DESeq(dds)

res = data.frame(results(dds))

我们需要获取一个注释,可以是床文件,你使用来自 rtracklayer 的相同功能import()

library(rtracklayer)
gtf = import("ftp://ftp.ensembl.org/pub/release-100/gtf/danio_rerio/Danio_rerio.GRCz11.100.gtf.gz")

genes = gtf[gtf$type=="gene"]

head(genes)
GRanges object with 6 ranges and 20 metadata columns:
      seqnames      ranges strand |   source     type     score     phase
         <Rle>   <IRanges>  <Rle> | <factor> <factor> <numeric> <integer>
  [1]        4 17308-18211      - |  ensembl     gene      <NA>      <NA>
  [2]        4 31259-45642      + |  ensembl     gene      <NA>      <NA>
  [3]        4 38344-45396      + |  ensembl     gene      <NA>      <NA>
  [4]        4 48519-53370      - |  ensembl     gene      <NA>      <NA>
  [5]        4 57034-64703      - |  ensembl     gene      <NA>      <NA>
  [6]        4 69619-72011      + |  ensembl     gene      <NA>      <NA>

您需要将 deseq2 结果的行名与列匹配,在本例中为 gene_id,如果您的 table 是符号,请将其与适当的匹配:

annotation = as.data.frame(genes)[match(rownames(res),genes$gene_id),]
head(as.data.frame(genes)[match(rownames(res),genes$gene_id),])
      seqnames    start      end width strand         source type score phase
12565        9 34112067 34121839  9773      - ensembl_havana gene    NA    NA
12564        9 34089156 34113209 24054      + ensembl_havana gene    NA    NA
484          4 15081385 15103696 22312      - ensembl_havana gene    NA    NA
480          4 15011341 15059876 48536      + ensembl_havana gene    NA    NA
21778       12 33484458 33537126 52669      + ensembl_havana gene    NA    NA

这里有不止一条染色体,所以我们只做 25 号染色体:

res = cbind(res,annotation[,1:5])
res = res[which(res$seqnames == 25),]

plot(res$start,res$log2FoldChange,xaxt="n",xlab="Pos on chr25",ylab="Log2FC")
axis(side=1,5e6*1:8,paste(5 * 1:8,"Mb"))