ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
115 stars 30 forks source link

师妹手把手教你使用R包drawProteins-去绘制蛋白结构原理图!! #5488

Closed ixxmu closed 1 month ago

ixxmu commented 1 month ago

https://mp.weixin.qq.com/s/oV1lAm1SgG70FXfCOoj-ng

ixxmu commented 1 month ago

师妹手把手教你使用R包drawProteins-去绘制蛋白结构原理图!! by R语言学徒

做生信的小伙伴生物基础肯定都不错,最基础的知识基因与蛋白质的关系也是熟记于心,我们都明白他们之间的关系,师妹这里就不多赘述,之所以提起这个关系,是因为我们在做生信分析的时候,想要了解研究基因的本质,肯定离不开对蛋白质的研究,比如我们在探究大基因的分子机制,大多数都是从蛋白质数据库中寻找基因的结构图,然后通过结构去了解分子机制。所以师妹这次教小伙伴去绘制蛋白结构原理图,放在我们的文章当中,可以作为一个亮点。

我们平时去查看蛋白质结构的时候基本上都是从蛋白质相关的数据库下载,但是这样绘制的图片都难去调整。师妹这次教小伙伴使用R语言去绘制,是不是很新奇。就是R包drawProteins。

我们先了解一下这个包是干嘛的,这个软件包从UniprotAPI输出中绘制蛋白质示意图。它根据GET命令返回的JSON,从Uniprot Features API 创建一个数据框。然后,基于ggplot2和BaseR的geoms可以使用该数据框来绘制蛋白质示意图。是不是听起来很厉害,其实就是从蛋白质数据库下载,然后使用ggplot2去绘制加工。

工作流程呢师妹这里简单总结一下吧

提供一个或多个Uniprot ID

从Uniprot API获取feature 列表

绘制这些蛋白质的基本链

根据需要添加feature

我们了解了这么多,下面我们就开始绘制吧

先分享一下这个包的下载方式

if (!require("BiocManager", quietly = TRUE))      install.packages("BiocManager")        BiocManager::install("drawProteins")

加载一下这个包

library(drawProteins)

下面的操作就需要我们用联网去完成,小伙伴不要断网了哦

我们先从Uniprot检索

# accession numbers of rel AdrawProteins::get_features("Q04206") -> rel_json

然后就是第二部,我们要将Uniprot中的数据转化为数据框,这个师妹就不多揭示了,小伙伴肯定都明白,因为我们要使用ggplot2,所以Uniprot API中的数据要转换为可与ggplot2一起使用的数据框

我们这里使用feature_to_dataframe()函数,这个函数会将get_features()函数提供的六个列表的列表转换为数据框,然后可用于绘制示意图。此外呢,feature_to_dataframe()函数还将添加一个“order”值以允许绘图

来看看:

#将 Uniprot 数据转换为数据框drawProteins::feature_to_dataframe(rel_json) -> rel_data

然后就是去绘制图了,首先要画出蛋白质的链还有其结构域,因为我们要使用ggplot2去绘制,所以别忘了调用一下

我们这里使用geom_rect()和geom_label通过ggplot2绘制数据。第一步是使用draw_canvas 制作画布,它基于正在绘制的最长蛋白质。这可以通过以下方式使用管道来完成。

#蛋白质链和结构域draw_canvas(rel_data) -> pp    

幕布绘制完成,然后绘制蛋白质链。使用draw_chain()函数,我们必须向该函数提供ggplot对象p和rel_data数据

p <- draw_chains(p, rel_data)p  

 

下面我们就可以绘制图了,这里主要添加按照长度缩放的域。这里使用 draw_domains()函数,所以我们向该函数提供ggplot对象p和rel_data数据。R包的默认设置是为链添加标签。可以使用参数label_chains=FALSE删除标签

#添加按照长度缩放的域p <- draw_domains(p, rel_data)p    

为了更好地展示这种可视化效果,白色背景以及删除y轴和网格都有帮助。还可以使用base_size 参数更改文本的大小,来看看如何绘制:

#base_size 参数更改文本的大小# 白色背景并删除y轴p <- p + theme_bw(base_size = 20) + # white background  theme(panel.grid.minor=element_blank(),        panel.grid.major=element_blank()) +  theme(axis.ticks = element_blank(),            axis.text.y = element_blank()) +  theme(panel.border = element_blank())p

好了这个基础的函数我们就绘制完成了,我们绘制蛋白质结构图,肯定不止一种feature,也就是特征,所以我们就需要不同的函数去绘制不同的蛋白质结构特征,来看看怎么回事

#展示其他 featuredraw_regions(p, rel_data) # 添加激活域

draw_repeat(p, rel_data) # 在这种情况下没有添加任何内容

draw_motif(p, rel_data) # 添加9aa事务激活域&NLS

还有一种是

# 添加Uniprot的磷酸化位点draw_phospho(p, rel_data, size = 8)

上述这几个不同的特征结构,我们不能分开去放在文章当中,所以这就需要我们把不同特征的蛋白质结构放在一起,这个功能ggplot2最熟悉不过了,我们这个老朋友最喜欢干的就是对细节的处理,来看看如何去绘制

对于 Rel A结构,我们如何一下进行组合

#组合draw_canvas(rel_data) -> pp <- draw_chains(p, rel_data)p <- draw_domains(p, rel_data)p <- draw_regions(p, rel_data)p <- draw_motif(p, rel_data)p <- draw_phospho(p, rel_data, size = 8)           p <- p + theme_bw(base_size = 20) + # 白色背景&更改文本大小  theme(panel.grid.minor=element_blank(),        panel.grid.major=element_blank()) +      theme(axis.ticks = element_blank(),        axis.text.y = element_blank()) +  theme(panel.border = element_blank())p

然后我们可以使用ggplot2去添加标题

#添加标题# add titlesrel_subtitle <- paste0("circles = phosphorylation sites\n",                       "RHD = Rel Homology Domain\nsource:Uniprot")           p <- p + labs(title = "Rel A/p65",              subtitle = rel_subtitle)p

如果我们面对多种蛋白质,该如何绘制呢,这次面对的是种类,来看看如何绘制,我们通过代码去显示NFkappaB 转录因子家族的五种蛋白质的工作流程:

#多种蛋白质的示意图# 五种NF-κB蛋白的登录号           prot_data <- drawProteins::get_features("Q04206 Q01201 Q04864 P19838 Q00653")

然后我们去绘制图,原理和上述绘制的代码差不多,来看看

对数据的加载p <- draw_canvas(prot_data)p <- draw_chains(p, prot_data)p <- draw_domains(p, prot_data)    p <- draw_repeat(p, prot_data)p <- draw_motif(p, prot_data)p <- draw_phospho(p, prot_data, size = 8)# 背景和y轴p <- p + theme_bw(base_size = 20) + # 白色背景&更改文本大小   theme(panel.grid.minor=element_blank(),        panel.grid.major=element_blank()) +  theme(axis.ticks = element_blank(),        axis.text.y = element_blank()) +  theme(panel.border = element_blank())           # 添加标题rel_subtitle <- paste0("circles = phosphorylation sites\n",                       "RHD = Rel Homology Domain\nsource:Uniprot")           p <- p + labs(title = "Schematic of human NF-kappaB proteins",              subtitle = rel_subtitle)           # 将图例移到顶部p <- p + theme(legend.position="top") + labs(fill="")p    

如果小伙伴不喜欢图片的样式,我们可以通过ggplot2去调整

#自定义绘图函数data("five_rel_data")

p <- draw_canvas(five_rel_data)p <- draw_chains(p, five_rel_data,                 label_chains = FALSE,                 fill = "hotpink",                     outline = "midnightblue")p

还可以更改蛋白结构中磷酸化符号的大小和颜色

#符号的大小和颜色p <- draw_canvas(five_rel_data)p <- draw_chains(p, five_rel_data,                 fill = "lightsteelblue1",                     outline = "grey",                 label_size = 5)p <- draw_phospho(p, five_rel_data, size = 10, fill = "red")p + theme_bw()

还可以将标签更改为自定义列表

p <- draw_canvas(five_rel_data)p <- draw_chains(p, five_rel_data,                 fill = "lightsteelblue1",                 outline = "grey",                 labels = c("p50/p105",                            "p50/p105",                            "p52/p100",                            "p52/p100",                            "Rel B",                            "c-Rel",                                "p65/Rel A"),                 label_size = 5)p <- draw_phospho(p, five_rel_data, size = 8, fill = "red")p + theme_bw()

好了,到此,我们的蛋白质结构学习就完成了,小伙伴要多多理解代码的意思,上述一些细节都是我们平时在用ggplot2绘制图片的时候接触过的,小伙伴可能有的比较熟悉,所以,学会这个章节给自己的文章添加一些亮点,快去亲自动手试试吧!


E

N

D


如果您的时间和精力有限或者缺乏相关经验,并且对生信分析和期刊推荐有所需要的话,我们非常乐意为您提供如下服务:免费思路评估、付费生信分析和方案设计以及付费选刊等,有意向的小伙伴欢迎咨询师妹哦!



往期推荐

别再说纯生信想不出好思路了!北大深圳医院黄晓彦团队基于UKB数据库,孟德尔随机化一套连招拿下13分+!

师妹手把手带你复现IF5.8《Cancer Cell International》杂志的高分文章中相关性热图和散点图

是谁还不会用孟德尔随机化?这篇文章教你!高分SCI不是梦!!

师妹教你R包EnhancedVolcano超详尽,让你的火山图喷发姿势更帅