前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >探索ggplot2的无限可能:140+ggplot2扩展包让你的图表更出彩

探索ggplot2的无限可能:140+ggplot2扩展包让你的图表更出彩

作者头像
生信菜鸟团
发布2024-12-09 13:06:08
发布2024-12-09 13:06:08
12600
代码可运行
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团
运行总次数:0
代码可运行

生信技能树有一个图片可视化需求收集群,无意中看到一个群友分享的超级棒的可视化网页:https://exts.ggplot2.tidyverse.org/gallery/。

然后进去看了一下,打开了ggplot新天地:

这个网页中居然收录了140+个ggplot2可视化扩展包,妈妈再也不用担心我的绘图问题了吧!其中不乏大家常见的如:

现在让我先来看看其中一些包的可视化结果:我对其中两个包比较感兴趣,gggenes 和 gggenomes,这两个包可以可视化参考基因组上的基因结构等。简单探索一下其中一个:

gggenes包:drawing gene arrow maps

包的网址:https://wilkox.org/gggenes/

首先安装:

代码语言:javascript
代码运行次数:0
运行
复制
# 设置镜像
options(BioC_mirror="https://mirrors.westlake.edu.cn/bioconductor")
options("repos"=c(CRAN="https://mirrors.westlake.edu.cn/CRAN/"))

# 安装cran上的
install.packages("gggenes")

# 或者 安装github上的最新版
devtools::install_github("wilkox/gggenes")

# 检测是否安装成功
library(gggenes)
library(ggplot2)
使用 geom_gene_arrow()函数绘制基因箭头:

geom_gene_arrow() 是一个 ggplot2 的几何对象(geom),它用箭头来表示基因,

基因的起始位置和终止位置分别映射到 xminxmax 上,用来确定箭头指向的方向,

y轴对应不同的染色体。

代码语言:javascript
代码运行次数:0
运行
复制
# 看下包中自带的测试数据
head(example_genes)

#   molecule gene start   end  strand orientation
# 1  Genome1 genA 15389 17299 reverse           1
# 2  Genome1 genB 17301 18161 forward           0
# 3  Genome1 genC 18176 18640 reverse           1
# 4  Genome1 genD 18641 18985 forward           0
# 5  Genome1 genE 18999 20078 reverse           1
# 6  Genome1 genF 20086 20451 forward           1

table(example_genes$molecule)

第一列为基因的染色体编号;

第二列为基因symbol;

第三、四列为基因的起始,终止坐标;

第五列为基因的正负链;

第六列为基因的方向,与第五列对应;

先看看基础绘图:

代码语言:javascript
代码运行次数:0
运行
复制
p <- 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")

ggsave(filename = "plot1.png", width = 12, height = 8, plot = p)

不同染色体上的不同基因:需要注意的是这里所用的数据只是一个示例数据,因为同一个基因应该不可能在不同的染色体上面

使用theme_genes进行美化

使用ggplot2 主题 theme_genes进行美化:

代码语言:javascript
代码运行次数:0
运行
复制
p <- 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()

ggsave(filename = "plot2.png", width = 12, height = 8, plot = p)

比默认看着更加清爽:

使用 make_alignment_dummies() 在分面图中对基因进行对齐

通常我们可能会希望某个基因在分面中的坐标垂直对齐:

这里使用genE作为参考位置,其他基因与其坐标对齐。

代码语言:javascript
代码运行次数:0
运行
复制
dummies <- make_alignment_dummies(
  example_genes,
  aes(xmin = start, xmax = end, y = molecule, id = gene),
  on = "genE"
)

p <- 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()

ggsave(filename = "plot3.png", width = 12, height = 8, plot = p)

可以看到不同分面中的基因位置有了相对变化:

使用 geom_gene_label() 为基因添加标签

geom_gene_label() 利用 ggfittext 包来将标签文本适应到基因箭头内部,有关它如何调整大小和重新流动文本以适应的更多细节,请参阅 ggfittext 文档。

代码语言:javascript
代码运行次数:0
运行
复制
p <- 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() 

ggsave(filename = "plot4.png", width = 12, height = 8, plot = p)

结果如下:

使用forward调整基因方向

一般来说基因的方向是根据xminxmax决定的,但是我们还可以使用forward参数改变其方向。这在基因的坐标和方向作为独立变量进行编码时非常有用。

如果 forward 的值为 TRUE(默认值),基因将按照暗示的方向绘制,即从 xmin 指向 xmax

如果 forward 的值为 FALSE,基因将按照与暗示方向相反的方向绘制:

代码语言:javascript
代码运行次数:0
运行
复制
p <- ggplot(example_genes, aes(xmin = start, xmax = end, y = molecule, fill = gene, forward = orientation)) +
  geom_gene_arrow() +
  facet_wrap(~ molecule, scales = "free", ncol = 1) +
  scale_fill_brewer(palette = "Set3") +
  theme_genes()

ggsave(filename = "plot5.png", width = 12, height = 8, plot = p)

结果如下:

使用 geom_subgene_arrow()绘制基因结构域

我们可以使用 geom_subgene_arrow() 来突出显示基因的子段,例如蛋白质结构域或局部比对区域。

这里 需要 xsubmin and xsubmax 来确定基因的结构区域,例如参考数据:

代码语言:javascript
代码运行次数:0
运行
复制
head(example_subgenes)

  molecule gene  start    end  strand subgene   from     to orientation
1  Genome5 genA 405113 407035 forward  genA-1 405774 406538           0
2  Genome5 genB 407035 407916 forward  genB-1 407458 407897           0
3  Genome5 genC 407927 408394 forward  genC-1 407942 408158           0
4  Genome5 genC 407927 408394 forward  genC-2 408186 408209           0
5  Genome5 genC 407927 408394 forward  genC-3 408233 408257           0
6  Genome5 genF 409836 410315 forward  genF-1 409938 410016           0

绘制:

代码语言:javascript
代码运行次数:0
运行
复制
p <- 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()

ggsave(filename = "plot6.png", width = 12, height = 8, plot = p)

结果如下:

给他贴上基因symbol:

代码语言:javascript
代码运行次数:0
运行
复制
data <- subset(example_genes, molecule == "Genome4" & gene == "genA")
data

data_subgene <- subset(example_subgenes, molecule == "Genome4" & gene == "genA")
data_subgene

p <- ggplot(data, aes(xmin = start, xmax = end, y = strand) ) +
  geom_gene_arrow() +
  geom_gene_label(aes(label = gene)) +
  geom_subgene_arrow(data=data_subgene, aes(xsubmin = from, xsubmax = to, fill = subgene)) +
  geom_subgene_label(data=data_subgene, aes(xsubmin = from, xsubmax = to, label = subgene),min.size = 0)

ggsave(filename = "plot7.png", width = 6, height = 2, plot = p)

结果如下:

使用geom_feature()绘制点状遗传特征

我们可以绘制点状遗传特征,例如限制性酶切位点或转录起始位点。

需要的数据如下:

代码语言:javascript
代码运行次数:0
运行
复制
head(example_features)

  molecule name             type position forward
1  Genome1 tss9              tss    22988      NA
2  Genome1  rs4 restriction site    18641      NA
3  Genome1 ori5              ori    18174      NA
4  Genome2  rs0 restriction site    12256      NA
5  Genome2  rs1 restriction site    14076      NA
6  Genome2 ori1              ori    13355   FALSE

绘制:

代码语言:javascript
代码运行次数:0
运行
复制
p <- ggplot(example_genes, aes(xmin = start, xmax = end, y = molecule, fill = gene, label = gene)) +
  geom_feature(data = example_features, aes(x = position, y = molecule, forward = forward) ) +
  geom_feature_label(
    data = example_features, aes(x = position, y = molecule, label = name, forward = forward) ) +
  geom_gene_arrow() +
  geom_gene_label() +
  geom_blank(data = example_dummies) +
  facet_wrap(~ molecule, scales = "free", ncol = 1) +
  scale_fill_brewer(palette = "Set3") +
  theme_genes()

ggsave(filename = "plot8.png", width = 12, height = 8, plot = p)

结果如下:

还有更多有意思的包,前去探索一下吧~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生信技能树有一个图片可视化需求收集群,无意中看到一个群友分享的超级棒的可视化网页:https://exts.ggplot2.tidyverse.org/gallery/。
  • gggenes包:drawing gene arrow maps
    • 使用 geom_gene_arrow()函数绘制基因箭头:
    • 使用theme_genes进行美化
    • 使用 make_alignment_dummies() 在分面图中对基因进行对齐
    • 使用 geom_gene_label() 为基因添加标签
    • 使用forward调整基因方向
    • 使用 geom_subgene_arrow()绘制基因结构域
    • 使用geom_feature()绘制点状遗传特征
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档