• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

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

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

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

      未分类

      • 首页
      • 博客
      • 未分类
      • (未测试)这样画基因结构图够好看!

      (未测试)这样画基因结构图够好看!

      • 发布者 weinfoauthor
      • 分类 未分类
      • 日期 2020年2月25日
      • 评论 0评论

      gggenes是ggplot2的扩展包,用于绘制基因结构图、多物种基因比较图的很好玩的工具。

      数据准备

      下面是用的数据内容如下:

      example_genes包括118行和6个变量。每一行代表一个基因或一个区域;列分别是:

      • molecule:基因组名字
      • gene: 基因名字 the name of the gene
      • start: 基因在基因组开始位置 (如果在负链,注意起始位置的写法跟bed文件不同了)
      • end: 基因结束位置 (负链的基因起始位置绝对值大于结束位置)
      • strand: 基因属于哪条链 (可选)

      如果想显示基因的子区域,如外显子、或翻译为特定功能域的区域等。

      example_subgenes多了三列信息:

      • subgeme: 子片段名字
      • from: 子片段开始位置
      • to: 子片段结束位置

      用geom_gene_arrow()画基因箭头

      geom_gene_arrow()是一个ggplot2几何性状,它用箭头表示基因。基因在分子内的起始和结束位置分别映射到xmin和xmax。这些开始和结束位置用于确定箭头指向的方向。基因组信息molecule映射到y轴。如果绘制的基因来自不同基因组的位置的数值相差很大,一般指定scale =“free”来调整横轴的坐标展示,以避免部分数字太大压缩了小基因组的基因的展示。

      library(ggplot2)
      library(gggenes)
      
      ggplot(example_genes, aes(xmin = start, xmax = end, y = molecule, fill = gene)) +
        geom_gene_arrow() +
        facet_wrap(~ molecule, scales = "free", ncol = 1) +
        scale_fill_brewer(palette = "Set3")

      用theme_genes美化图形

      由于生成的图可能看起来很混乱,因此ggplot2主题theme_genes提供了一些合理的缺省值美化结果。

      ggplot(example_genes, aes(xmin = start, xmax = end, y = molecule, fill = gene)) +
        geom_gene_arrow() +
        facet_wrap(~ molecule, scales = "free", ncol = 1) +
        scale_fill_brewer(palette = "Set3") +
        theme_genes()

      使用make_alignment_dummies()跨面对齐基因

      通常我们会想要所有物种按某一个指定的基因对齐,比如下面例子中的geneE。make_alignment_dummies()会根据给定的数据和待对齐的基因,生成一组空基因;再使用geom_blank()将这些空基因添加到绘图中,就可以填充两侧的空白,以在图上直观地对齐所选的基因。

      dummies <- make_alignment_dummies(
        example_genes,
        aes(xmin = start, xmax = end, y = molecule, id = gene),
        on = "genE"
      )
      
      ggplot(example_genes, aes(xmin = start, xmax = end, y = molecule, fill = gene)) +
        geom_gene_arrow() +
        geom_blank(data = dummies) +
        facet_wrap(~ molecule, scales = "free", ncol = 1) +
        scale_fill_brewer(palette = "Set3") +
        theme_genes()

      用geom_gene_label()标记基因

      把基因名字所在的列名字映射到label属性可以在图上标记每个基因的名字。geom_gene_label()使用ggfittext包将标签文本放入基因箭头内。

      ggplot(
          example_genes,
          aes(xmin = start, xmax = end, y = molecule, fill = gene, label = gene)
        ) +
        geom_gene_arrow(arrowhead_height = unit(3, "mm"), arrowhead_width = unit(1, "mm")) +
        geom_gene_label(align = "left") +
        geom_blank(data = dummies) +
        facet_wrap(~ molecule, scales = "free", ncol = 1) +
        scale_fill_brewer(palette = "Set3") +
        theme_genes()

      正负链基因分开展示

      forward属性可以用于在同一张图分开正负链基因的展示。如果forward为TRUE(默认值),或者任何强制为TRUE的值(如1),则该基因将被绘制为指向正常方向,即xmin和xmax所暗指的方向。如果forward为FALSE,或者任何强制为假的值(如-1),则该基因将按暗指方向的相反方向绘制。

      在下面的例子中,forward被用来反转所有反链上所有的基因方向,与xmin和xmax暗指的方向相反。

      example_genes$direction <- ifelse(example_genes$strand == "forward", 1, -1)
      ggplot(subset(example_genes, molecule == "Genome1"),
        aes(xmin = start, xmax = end, y = strand, fill = gene, forward = direction)) +
        geom_gene_arrow() +
        theme_genes()

      查看子基因(subgene)片段

      我们可以使用geom_subgene_arrow()突出显示子基因片段,例如蛋白功能域或局部比对区域。

      这与geom_gene_arrow()类似,但是除了xmin和xmax(确定基因边界)之外,我们还需要xsubmin和xsubmax来确定子区域的边界。如果子区域的边界超出了基因区域,则跳过该子区域,并弹出警告。配合geom_gene_arrow()不给基因上色,而只标记子区域。

      ggplot(example_genes, aes(xmin = start, xmax = end, y = molecule)) +
        facet_wrap(~ molecule, scales = "free", ncol = 1) +
        geom_gene_arrow(fill = "white") +
        geom_subgene_arrow(data = example_subgenes,
          aes(xmin = start, xmax = end, y = molecule, fill = gene,
              xsubmin = from, xsubmax = to), color="black", alpha=.7) +
        theme_genes()

      使用geom_subgene_label()给子区域在图上加标签,它的工作原理类似于geom_gene_label(),但主要的区别是它需要xsubmin和xsubmax属性 (而不是xmin和xmax)。

      ggplot(subset(example_genes, molecule == "Genome4" & gene == "genA"),
             aes(xmin = start, xmax = end, y = strand)
        ) +
        geom_gene_arrow() +
        geom_gene_label(aes(label = gene)) +
        geom_subgene_arrow(
          data = subset(example_subgenes, molecule == "Genome4" & gene == "genA"),
          aes(xsubmin = from, xsubmax = to, fill = subgene)
        ) +
        geom_subgene_label(
          data = subset(example_subgenes, molecule == "Genome4" & gene == "genA"),
          aes(xsubmin = from, xsubmax = to, label = subgene),
          min.size = 0
        )

      如果还想可视化具有基因组基因座结构的系统进化树,推荐阅读Y叔根据gggenes包数据写的扩展:https://yulab-smu.github.io/treedata-book/chapter11.html#genome-locus。

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

      • 分享:
      weinfoauthor
      weinfoauthor

      1233

      上一篇文章

      (未测试)探索可变剪切分析6种方法
      2020年2月25日

      下一篇文章

      NC免疫相关的lncRNA研究利器:ImmLnc
      2020年2月25日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      8-1678501786
      肿瘤细胞通过改变CD8+ T细胞中的丙酮酸利用和琥珀酸信号来调控抗肿瘤免疫应答。
      7 12月, 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年
      在线支付 激活码

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