• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      老俊俊的生信笔记

      • 首页
      • 博客
      • 老俊俊的生信笔记
      • deeptools 结果重新绘图

      deeptools 结果重新绘图

      • 发布者 weinfoadmin
      • 分类 老俊俊的生信笔记
      • 日期 2022年4月21日
      测试开头


      随缘

      deeptools 结果重新绘图

      1引言

      之前就有这个想法,把 deeptools computeMatrix 输出的结果尝试自己能不能 重新个性化绘制 以及 是否方便 。但一直没有施以行动,此篇推文即是关于这样一个分享。

      最重要的是去理解 computeMatrix 输出的结果文件的内容,才能准确的绘图!

      有关 deeptools 的介绍见:

      1. Deeptools 神器之 bamCoverage
      2. 神器之 computeMatrix + 绘图

      这里从网上下载了 5 个 Chip-seq 的结果文件进行可视化,当作测试数据。

      2deeptools 可视化

      首先我们使用 deeptools 的功能去可视化,去看看效果怎样。

      计算在基因 TSS 及 TES 的信号分布,reference-point模式:

      computeMatrix reference-point -p 10 
                    --binSize 50 
                    --referencePoint TSS 
                    -a 3000 -b 3000 
                    -R hg19.ncbiRefSeq.gtf 
                    -S Input.bigWig H3K4me1.bigWig H3K4me3.bigWig H3K27ac.bigWig H3K9ac.bigWig 
                    --skipZeros 
                    -o combine-refPoint-data.gz

      scale-regions 模式:

      computeMatrix scale-regions -p 10 
                    --binSize 50 
                    --regionBodyLength 5000 
                    -a 3000 -b 3000 
                    -R hg19.ncbiRefSeq.gtf 
                    -S Input.bigWig H3K4me1.bigWig H3K4me3.bigWig H3K27ac.bigWig H3K9ac.bigWig 
                    --skipZeros 
                    -o combine-scaleRegion-data.gz

      然后使用 plotHeatmap 函数进行可视化绘制热图:

      plotHeatmap -m combine-refPoint-data.gz 
                  --missingDataColor 1 
                  --colorList 'white,#339933' 
                  --heatmapHeight 12 
                  -o refp-heatmap.pdf

      plotHeatmap -m combine-scaleRegion-data.gz 
                  --missingDataColor 1 
                  --colorList 'white,#0066CC' 
                  --heatmapHeight 12 
                  -o scaleRegion-heatmap.pdf

      TSS:

      deeptools 结果重新绘图

      TSS-TES:

      deeptools 结果重新绘图

      感觉还是很不错的!

      3R 里可视化

      reference-point 数据

      首先需要对输出的压缩文件进行解压,这里读入的是解压后的文件:

      library(ggplot2)
      library(tidyverse)
      library(reshape2)
      library(ggsci)
      library(Rmisc)
      library(data.table)

      # load data
      refp <- fread('combine-data',header = F)

      # check
      head(refp[1:3,1:8])
      #      V1       V2       V3      V4 V5 V6    V7     V8
      # 1: chrY 59001389 59002517 CTBP2P1  .  + 1.193 0.9338
      # 2: chrY 28772469 28773515  CCNQP2  .  - 0.105 0.2480
      # 3: chrY 28740814 28780802 PARP4P1  .  - 0.000 0.0000

      dim(refp)
      # [1] 92857   606

      # 间距除以50 binsize得120,再乘以5个样本得600列,加上前6列基因信息为606列
      (3000 + 3000)/50*5
      # [1] 600

      到这里基本上知道了数据的基本内容了,六列基因的信息加上bin 列的值。后面绘图需要再处理一下格式:

      # 保留基因名
      clean_refp <- refp %>% select(c(-1:-3,-5,-6))

      # check
      head(clean_refp[1:3,1:8])
      #         V4    V7     V8     V9    V10    V11    V12   V13
      # 1: CTBP2P1 1.193 0.9338 1.0962 1.6124 2.3094 2.5792 2.727
      # 2:  CCNQP2 0.105 0.2480 0.3950 0.4400 0.4400 0.4400 0.335
      # 3: PARP4P1 0.000 0.0000 0.0000 0.0000 0.0000 0.0000 0.000

      # wide to long
      long_refp <- melt(clean_refp,id.vars = 'V4',value.name = 'signal') %>%
        select(-variable)

      # add sample name
      long_refp$sample <- rep(c("Input","H3K4me1","H3K4me3","H3K27ac","H3K9ac"),
                              each = nrow(refp)*120)

      # add x position
      long_refp$pos <- rep(c(1:120),each = nrow(refp),times = 5)

      Profile 图为每个位置处所有基因的一个 均值 作为代表,这里也计算了 sd和95% 置信区间,也可以作为阴影区间可视化:

      # calculate means
      filnal_refp <- long_refp %>%
        # remove na
        tidyr::drop_na() %>%
        dplyr::group_by(sample,pos) %>%
        # mean and 95% interval confidence
        dplyr::summarise(mean_signal = mean(signal),
                         sd = sd(signal),
                         upper = CI(signal,ci = 0.95)[1],
                         lower = CI(signal,ci = 0.95)[3])

      # check
      head(filnal_refp)
      # # A tibble: 6 x 6
      # # Groups:   sample [1]
      #    sample    pos mean_signal    sd upper lower
      #     <chr>   <int>       <dbl> <dbl> <dbl> <dbl>
      # 1 H3K27ac     1        2.28  7.13  2.33  2.24
      # 2 H3K27ac     2        2.30  7.18  2.34  2.25
      # 3 H3K27ac     3        2.31  7.21  2.35  2.26
      # 4 H3K27ac     4        2.31  7.21  2.36  2.27
      # 5 H3K27ac     5        2.32  7.20  2.37  2.28
      # 6 H3K27ac     6        2.33  7.20  2.38  2.28

      可视化:

      # plot
      p <- ggplot(filnal_refp,aes(x = pos,y = mean_signal)) +
        geom_line(aes(color = sample),size = 1) +
        theme_classic(base_size = 14) +
        scale_color_d3(name = '') +
        # x label
        scale_x_continuous(breaks = c(0,60,120),
                           labels = c('-3 kb','TSS','+3 kb')) +
        xlab('') + ylab('Normalized signal') +
        theme(aspect.ratio = 0.8)

      p
      deeptools 结果重新绘图

      分面:

      # facet
      p + facet_wrap(~sample,scales = 'free_x',ncol = 5) +
        theme(strip.background = element_rect(color = NA,fill = 'grey'))
      deeptools 结果重新绘图

      添加置信区间,是有阴影区间的,可能看不太出来:

      # add CI
      ggplot(filnal_refp,aes(x = pos,y = mean_signal)) +
        # add 0.95 interval
        geom_ribbon(aes(ymin = lower,
                        ymax = upper,
                        fill = sample),
                    alpha = 0.5) +
        geom_line(aes(color = sample),size = 1) +
        theme_classic(base_size = 16) +
        scale_color_d3(name = '') +
        scale_fill_d3(name = '') +
        # x label
        scale_x_continuous(breaks = c(0,60,120),
                           labels = c('-3 kb','TSS','+3 kb')) +
        xlab('') + ylab('Normalized signal') +
        theme(aspect.ratio = 0.8)
      deeptools 结果重新绘图

      scale-regions 数据

      这个数据与上面不同的是多了中间的 regionBodyLength 的参数,所以 bin 的数量也包含了这个区间的长度:

      ####################################################
      # load data
      scaler <- fread('combine-scaleRegion-data',header = F)

      # check
      head(scaler[1:3,1:8])
      #      V1       V2       V3      V4 V5 V6    V7     V8
      # 1: chrY 59001389 59002517 CTBP2P1  .  + 1.193 0.9338
      # 2: chrY 28772469 28773515  CCNQP2  .  - 0.105 0.2480
      # 3: chrY 28740814 28780802 PARP4P1  .  - 0.000 0.0000

      dim(scaler)
      # [1] 93070  1106

      # 间距除以50 binsize得220,再乘以5个样本得1100列,加上前6列基因信息为1106列
      (3000 + 5000 + 3000)/50*5
      # [1] 1100

      到这里可以明白了数据的内容构成。

      继续处理:

      # 保留基因名
      clean_scaler <- scaler %>% select(c(-1:-3,-5,-6))

      # check
      head(clean_scaler[1:3,1:8])
      #         V4    V7     V8     V9    V10    V11    V12   V13
      # 1: CTBP2P1 1.193 0.9338 1.0962 1.6124 2.3094 2.5792 2.727
      # 2:  CCNQP2 0.105 0.2480 0.3950 0.4400 0.4400 0.4400 0.335
      # 3: PARP4P1 0.000 0.0000 0.0000 0.0000 0.0000 0.0000 0.000

      # wide to long
      long_scaler <- melt(clean_scaler,id.vars = 'V4',value.name = 'signal') %>%
        select(-variable)

      # add sample name
      long_scaler$sample <- rep(c("Input","H3K4me1","H3K4me3","H3K27ac","H3K9ac"),
                              each = nrow(scaler)*220)

      # add x position
      long_scaler$pos <- rep(c(1:220),each = nrow(scaler),times = 5)

      # calculate means
      filnal_scaler <- long_scaler %>%
        # remove na
        tidyr::drop_na() %>%
        dplyr::group_by(sample,pos) %>%
        # mean and 95% interval confidence
        dplyr::summarise(mean_signal = mean(signal),
                         sd = sd(signal),
                         upper = CI(signal,ci = 0.95)[1],
                         lower = CI(signal,ci = 0.95)[3])

      # check
      head(filnal_scaler)
      # # A tibble: 6 x 6
      # # Groups:   sample [1]
      #    sample    pos mean_signal    sd upper lower
      #     <chr>   <int>       <dbl> <dbl> <dbl> <dbl>
      # 1 H3K27ac     1        2.28  7.12  2.32  2.23
      # 2 H3K27ac     2        2.29  7.17  2.34  2.24
      # 3 H3K27ac     3        2.30  7.20  2.35  2.25
      # 4 H3K27ac     4        2.31  7.20  2.35  2.26
      # 5 H3K27ac     5        2.32  7.20  2.36  2.27
      # 6 H3K27ac     6        2.32  7.19  2.37  2.28

      最后可视化:

      # plot
      p <- ggplot(filnal_scaler,aes(x = pos,y = mean_signal)) +
        geom_line(aes(color = sample),size = 1) +
        theme_classic(base_size = 14) +
        scale_color_d3(name = '') +
        # x label
        scale_x_continuous(breaks = c(0,60,160,220),
                           labels = c('-3 kb','TSS','TES','+3 kb')) +
        xlab('') + ylab('Normalized signal') +
        theme(aspect.ratio = 0.8)

      p
      deeptools 结果重新绘图

      分面:

      # facet
      p + facet_wrap(~sample,scales = 'free_x',ncol = 5) +
        theme(strip.background = element_rect(color = NA,fill = 'grey'),
              axis.text.x = element_text(angle = 45,hjust = 1))
      deeptools 结果重新绘图

      heatmap

      这里也尝试了绘制热图,但是数据太大,R 里画的话就非常非常慢, 此外需要对数据进行排序, 这里提供一个代码:

      ####################################################
      # heatmap

      head(long_refp,3)
      #        V4 signal sample pos
      # 1 CTBP2P1  1.193  Input   1
      # 2  CCNQP2  0.105  Input   1
      # 3 PARP4P1  0.000  Input   1

      # plot (slowly)
      ggplot(long_refp %>% filter(sample == 'H3K27ac'),
             aes(x = pos,y = V4)) +
        geom_tile(aes(fill = signal)) +
        theme_bw() +
        # coord_cartesian(expand = 0) +
        scale_x_continuous(breaks = c(0,60,120),
                           labels = c('-3 kb','TSS','+3 kb')) +
        scale_fill_gradient(low = 'white',high = 'red') +
        ylab('') + xlab('') +
        theme(axis.text.y = element_blank(),
              axis.ticks.y = element_blank(),
              panel.grid = element_blank(),
              aspect.ratio = 1.5)
      deeptools 结果重新绘图

      4结尾

      绘制热图的话还是使用 deeptools 的自带的函数更好一些,更快,而且含有很多可以调整的参数哦。



      deeptools 结果重新绘图


      欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦,数据代码已上传至QQ群,欢迎加入下载。

      群二维码:

      deeptools 结果重新绘图


      老俊俊微信:


      deeptools 结果重新绘图

      知识星球:


      deeptools 结果重新绘图


      所以今天你学习了吗?

      今天的分享就到这里了,敬请期待下一篇!

      最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!

      如果觉得对您帮助很大,赏杯快乐水喝喝吧!



       往期回顾 





      ◀使用 python 进行 Ribo-seq 质控分析 一

      ◀跟着 Cell 学 Ribo-seq 分析 四 (终)

      ◀跟着 Cell 学 Ribo–seq 分析 三 (Metagene Plot)

      ◀跟着 Cell 学 Ribo–seq 分析 二

      ◀RiboPlotR 优雅的可视化你的 Ribo–seq 数据

      ◀跟着 Cell 学 Ribo–seq 分析 一

      ◀RNAmod: m6A peak 注释神器

      ◀提取酵母两端扩展 50nt 的 CDS 序列

      ◀R 里使用 python 加速 R 代码运行

      ◀do.call 比 Reduce 快?

      ◀...

      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      使用 python 进行 Ribo-seq 质控分析 一
      2022年4月21日

      下一篇文章

      使用 python 进行 Ribo-seq 质控分析 二
      2022年4月22日

      你可能也喜欢

      8-1651542331
      跟着Nature学绘图(2) 箱线图-累积分布曲线图
      2 5月, 2022
      9-1651542322
      Julia 笔记之字符串
      2 5月, 2022
      0-1651542343
      Julia 笔记之数学运算和初等函数
      1 5月, 2022

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?