立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 819|回复: 5

[分享] 请问一下如何看懂生信分析文章里面的图?

[复制链接]
发表于 2024-9-29 22:47 | 显示全部楼层 |阅读模式
回复

使用道具 举报

发表于 2024-9-29 22:48 | 显示全部楼层
弄懂生信分析文章里的图首先还是需要弄清楚它们的临床意义,为什么要这么做。对应到文献中去了解清楚,自然而然就会理解生信分析文章中的图。
这里推荐一个关于临床科研相关的文献解读集,希望对您理解生信图有帮助。
临床科研文献解读集 - 知乎 (zhihu.com)
回复 支持 反对

使用道具 举报

发表于 2024-9-29 22:48 | 显示全部楼层
相信许多初入生信分析的小白都面临着同样地一到门槛,生信分析文献中形形色色的图表都代表着什么,要怎样才能够看懂这些图片。今天小云就将压箱底的方法传授于你们,保证你们读完以后懂得如何去掌握生信分析中常见的图表。该方法有以下几步:
第一步,首先需要你了解生物信息学分析流程,只有知道相关图表在分析中的哪个步骤被绘制,代入该场景下便很容易的理解图表想要表达什么:      


    • 数据预处理:首先,了解数据是如何获取和准备的。这可能包括测序数据的获取、质量控制、去除低质量读数等步骤;
    • 分析工具和方法:查看文章中的方法部分,了解作者使用了哪些生物信息学工具和方法。这些工具和方法可能包括比对工具、差异表达分析工具、富集分析工具等。理解这些工具和方法的原理和用途可以帮助你理解图表的背后含义;
    • 分析流程:尝试理解分析流程的逻辑顺序。这可能包括数据处理步骤(如基因表达定量、差异分析)、结果可视化等。

第二步,熟悉常见的图表类型。文章中的图表大致分为几类,折线图、柱状图、散点图、热图等等,相同的图表导入的数据不同,表达的含义便发生了变化。你只需要了解每个图形的特点,就可以很快的了解相关图表想表达什么含义:      


    • 折线图:折线图通常用于显示随时间、条件或其他因素而变化的数据趋势。在生物信息学中,它们可以用来表示基因表达水平随条件变化的情况;
    • 柱状图:柱状图通常用于比较不同组之间的数据。在生物信息学中,它们可以用于比较基因的表达水平或其他生物学特征在不同条件下的变化;
    • 散点图:散点图用于显示两个变量之间的关系。在生物信息学中,它们可以用来表示基因表达水平或其他生物学特征之间的相关性;
    • 热图:热图通常用于可视化大量数据。在生物信息学中,它们可以用来表示基因表达矩阵或其他高维数据;
    • 火山图:火山图用于可视化差异表达分析的结果,通常显示了p值与相关系数的关系。显著差异表达的基因会在图上显示为明显的点;
    • 气泡图:气泡图通常用于显示多个变量之间的关系,其中气泡的大小和/或颜色可以表示不同的数值。在生物信息学中,它们可以用于可视化富集分析结果。

第三步,理解统计分析相关知识。在生信分析中还需要你对数学统计方法有一定的基础,才能够一眼看出图片中各种标志代表的含义:


    • p值:p值表示观察到的差异是否是由于随机变异引起的。较小的p值表明差异更显著;
    • 假发现率(FDR):FDR是一种多重检验校正方法,用于控制假阳性的概率。较小的FDR值表示更低的错误发现率;
    • 调整后的p值:在多重比较中,p值可能会进行校正以控制错误发现率,例如Benjamini-Hochberg校正。调整后的p值通常更加保守;
    • 差异分析:差异分析通常包括统计测试,用于确定不同条件或组之间是否存在显著差异。差异通常以基因表达水平或其他生物学特征的变化来衡量。

第四步,多阅读生物信息学领域的相关文献可以帮助你更好地理解图表。文献中通常会提供详细的图表解释、方法描述和结果讨论,这对于你理解类似的图表也会有所帮助。不知道去哪里找文献或阅读有困难,小云公号中提供海量的文献解读。
第五步,使用在线资源。在解释图表时,您可以利用在线资源,如生信花、生信果公号或相关教育网站,来查找有关特定分析方法和图表类型的详细信息。
授人以鱼不如授人以渔,小云已经将方法都传授于你,但是在学习生信分析绘图的过程中,最重要的是保持耐心和学习态度,勤加练习,相信所有的图表都能被你掌握。希望这个回答对你有所帮助!更多生信分析内容,关注小云公号。
回复 支持 反对

使用道具 举报

发表于 2024-9-29 22:48 | 显示全部楼层
文章预览

欢迎大家关注我的微信公众号生信指北。

文章脉络




文章脉络

包含图形




包含图形

理解火山图


  • 火山图是一种散点图,它展示了统计学显著性(P值)与变化倍数之间的关系,因为形似火山而被称为火山图,生信中用来可视化两组样本间基因表达水平差异的分布状况。




  • 火山图的横轴为log2(Fold Change),一般简称为logFC,体现的是基因在样本间的差异表达倍数。从单个基因来理解,Fold Change就是两组间的表达量差异,通常是case(实验)组的平均表达量除以control(对照)组的平均表达量,比如这个基因在case组的平均表达量是8,而在control组的平均表达量是2,那么Fold Change就是4,logFC为2。而如果输入的表达矩阵不是原始的表达值而是log2后的表达矩阵,那么logFC就变成了case组的平均表达值减去control组的平均表达值,二者由公式log(x/y)=log(x)-log(y)统一。(参考生信菜鸟团(关于limma包差异分析结果的logFC解释)),这样差异越大的基因越分布在x轴的两端,左边为下调,右边为上调。
  • 纵坐标通常为log10转化后的显著性p值然后取负,
    -log10(pvalue=0.05)≈1.3,
    -log10(pvalue=0.02)=2,
    那么纵轴越往上p值越小,统计差异越显著。
    了解了上述基本信息之后,我们就可以开始作图了。
ggplot2

     ggplot2是R中最常用的作图库,对于ggplot2的作图我们将逐步详细进行介绍,其他方法提供代码参考。 首先我们需要加载之前差异分析的结果并加载ggplot2包:
rm(list=ls())
load('deg.RData')
library(ggplot2)
取出logFC,p值,校正后p值,差异分组四列,然后统一命名,这里是:
deg<-deg[,c(1,4,5,7)]
colnames(deg)<-c('log2FoldChange','pvalue','p.adjust','Group')
colnames(deg)
注意这里差异的分组Group是需要按自己设定的差异基因筛选标准来确定的,具体请看上篇。图中的虚线会展示筛选标准,所以这里我们也需要进行设置,我们之前采用的阈值是|logFC|>1,pvalue<0.05:
logfc.cut=1
p.cut=0.05
通过将log2FoldChange映射到x,-log10(pvalue)映射到y,差异分组映射到点的颜色,然后用geom_vline和geom_hline分别加上竖线和横线展示筛选阈值即可绘制完成简单的图形。
p<-ggplot(data = deg, aes(x = log2FoldChange,y = -log10(pvalue)))+
  geom_point(alpha=0.8, size=2, aes(color=Group)) +
  xlab(expression('log'[2]*'(FoldChange)'))+  #修改坐标轴名称
  ylab(expression('-log'[10]*'(pvalue)'))+
  geom_vline(xintercept=c(-logfc.cut,logfc.cut),lty=4,col="black",lwd=0.5) +
  geom_hline(yintercept = -log10(p.cut),lty=2,col="black",lwd=0.5) +
  theme_test() #这个主题可以去掉背景网格线
p
出图如下:


     未指定颜色的时候ggplot2会使用其默认配色方案,我们可以通过scale_color_manual()手动指定配色,另外可以在主题中调整图例的位置,这些都可以通过添加图层实现,这样就完成了一副火山图的绘制。
p+scale_color_manual(values=c("#6697ea", "grey","#b02428"))+
  theme(legend.position = "top",legend.title = element_blank())
出图如下:


     熟悉一些ggplot2的基本用法之后,我们就可以按照自己的想法来美化图片了,我们这里将校正后的p值映射到了点的大小,使用annotate添加上了文本注释,再加了一点点细节,就可以得到下面的图啦,需要这张图的带注释的代码和示例数据的同学可以在公众号回复ggplot2火山图代码拿到哦


    另外肯定有许多小伙伴想要在图中标注自己感兴趣的基因的方法,这里我们使用ggrepel实现,首先加载ggrepel包,然后设置允许重叠次数为无穷,否则图中重叠的点是无法进行标注的。
library(ggrepel)
options(ggrepel.max.overlaps = Inf)
    然后就需要找到我们自己感兴趣的基因,我们这里把|logFC|>4的基因设置为感兴趣基因,如果同学们有自己感兴趣的genelist,只需要将其赋值给interested_genes即可,然后新建一列与目标基因进行匹配,这一列输入到geom_label_repel中即可完成标注
interested_genes<-rownames(subset(deg,abs(log2FoldChange)>4))
#判断基因是否在感兴趣的基因内,在则标注为该基因名,否则为空
deg$Label<-ifelse(rownames(deg)%in%interested_genes,rownames(deg),'')
结果如下:


图中点有很多重叠所以边框颜色挤在一起了,这里设置的是同色系的边框,如果是黑色更加不好看,主要是因为数据点太多的原因,在数据点较少的情况下图还是比较好看的。这种情况下可以通过scale_color_manual()将边框颜色设置为与填充颜色一致,这样就去掉了边框颜色:



代码和数据已经包含在回复ggplot2火山图代码的内容当中,想要的童鞋可以回复领取。
ggpubr

    利用ggpubr包可以使用其中的ggscatter函数实现火山图的制作。
rm(list=ls())
load('deg.RData')
deg<-deg[,c(1,4,5,7)]
colnames(deg)[1:3]<-c('log2FoldChange','pvalue','p.adjust')
colnames(deg)
logfc.cut=1
p.cut=0.05

interested_genes<-rownames(subset(deg,abs(log2FoldChange)>4))
deg$Label<-ifelse(rownames(deg)%in%interested_genes,rownames(deg),'')

deg$logP<- -log10(deg$p.adjust)
library(ggpubr)
ggscatter(deg, x = "log2FoldChange", y = "logP",
          color = "Group",
          palette = c("#6697ea", "grey60","#b02428"),
          label = 'Label',
          font.label = 8,
          repel = T,
          label.rectangle = T,
          xlab = expression('log'[2]*'(FoldChange)'),
          ylab = expression('-log'[2]*'(pvalue)'),
          size = 2) +
  theme_test() +
  geom_hline(yintercept = -log10(p.cut), linetype = "dashed") +
  geom_vline(xintercept = c(-logfc.cut, logfc.cut), linetype = "dashed")+
  theme(legend.position = "top",legend.title = element_blank())
出图如下:



EnhancedVolcano

EnhancedVolcano包能够做出很漂亮的火山图,这里也分享给大家。只需要调用一个函数即可。
BiocManager::install('EnhancedVolcano')  #安装

library(EnhancedVolcano)
EnhancedVolcano(deg,
                lab = rownames(deg),
                x = 'log2FoldChange',
                y = 'pvalue',
                title = 'Volcano Plot',
                xlab = bquote(~Log[2]~'fold change'),
                pCutoff = 0.05,
                FCcutoff = 1,
                #pointSize = 4,
                pointSize = c(ifelse(abs(deg$log2FoldChange)>2,3, 2)),
                selectLab =interested_genes,#指定要标注的基因
                labSize = 4.0,
                colAlpha = 0.6,
                legendPosition = 'top',
                legendLabSize = 16,
                legendIconSize = 5.0,
                labCol = 'black',
                labFace = 'bold',
                boxedLabels = TRUE,
                drawConnectors = TRUE,
                widthConnectors = 1,
                colConnectors = 'black'
)
出图如下:



倾斜45度火山图

倾斜45度火山图可以在生信宝典的教程当中找到,示例使用的是DESeq2的差异分析结果数据,有两组的平均表达量值,而limma是没有的,所以这里不做展示,感兴趣的同学可以移步生信宝典的教程。



总结

这篇文章和大家分享了一些火山图的制作方法,主要介绍了ggplot2方法,希望大家喜欢,同时也感谢大家的支持!
回复 支持 反对

使用道具 举报

发表于 2024-9-29 22:49 | 显示全部楼层
还把图片删了,真当大伙是外人
回复 支持 反对

使用道具 举报

发表于 2024-9-29 22:50 | 显示全部楼层
这些都是很常规的图,表达差异、热图、网络图、相关性图、生存分析、roc这些。每个图表达的意思也都很简单
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表