前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >转录组-样品表达总体分布及质控可视化

转录组-样品表达总体分布及质控可视化

原创
作者头像
sheldor没耳朵
发布2024-08-14 09:26:55
1000
发布2024-08-14 09:26:55
举报
文章被收录于专栏:GEO数据挖掘

转录组-样品表达总体分布及质控可视化

在拿到表达矩阵时我们常常会对其基因表达的总体分布(可选),以及质量控制进行可视化(必须)。这里总结记录相关代码。

1 总体分布

表达矩阵总体分布常常用3种图可视化:

代码语言:r
复制
rm(list = ls())
options(stringsAsFactors = F)

# 加载包,设置绘图参数
library(ggplot2)
library(ggsci)
library(tidyverse)

mythe <- theme_bw() + theme(panel.grid.major=element_blank(),
                            panel.grid.minor=element_blank())


# 加载原始表达的数据
load(file = 'symbol_matrix.Rdata')
dat = log2(edgeR::cpm(symbol_matrix)+1)

1.1 箱式图

代码语言:r
复制
data <- dat %>% 
  as.data.frame() %>% 
  pivot_longer(cols = everything(), names_to = "sample",values_to = "expression")

head(data)

mythe <- theme_bw() + theme(panel.grid.major=element_blank(),
                            panel.grid.minor=element_blank())
p <- ggplot(data = data, aes(x=sample,y=expression,fill=sample))
p1 <- p + geom_boxplot() + 
  mythe + theme(axis.text.x = element_text(angle = 90)) + 
  xlab(NULL) + ylab("log2(CPM+1)") + scale_fill_lancet()

p1
# 保存图片
png(file = "1.sample_boxplot.png",width = 800, height = 900,res=150)
print(p1)
dev.off()

1.2 小提琴图

代码语言:r
复制
## 2.样本表达总体分布-小提琴图
p2 <- p + geom_violin() +  mythe +
  theme(axis.text = element_text(size = 12),
        axis.text.x = element_text(angle = 90)) + 
  xlab(NULL) + ylab("log2(CPM+1)")+scale_fill_lancet()
p2

# 保存图片
png(file = "1.sample_violin.png",width = 800, height = 900,res=150)
print(p2)
dev.off()

1.3 概率密度分布图

代码语言:r
复制
## 3.样本表达总体分布-概率密度分布图
m <- ggplot(data=data, aes(x=expression)) 
p3 <- m +  geom_density(aes(fill=sample, colour=sample),alpha = 0.1) + 
  xlab("log2(CPM+1)") + mythe + scale_fill_npg()
p3

# 保存图片
png(file = "1.sample_density.png",width = 800, height = 700, res=150)
print(p3)
dev.off()

2 质量控制

对表达矩阵质量控制可视化是转录组标准分析流程中必备的一步,通常包含3张图:

代码语言:r
复制
rm(list = ls()) 
options(stringsAsFactors = F)
library(ggplot2)
library(ggstatsplot)
library(ggsci)
library(RColorBrewer)
library(patchwork)
library(ggplotify)
load(file = 'symbol_matrix.Rdata') 
colnames(symbol_matrix)
symbol_matrix[1:4,1:4] ## 基因名字的样品,矩阵
dat = log2(edgeR::cpm(symbol_matrix)+1)
pro = 'test'

2.1 单独的基因可视化

这里可挑选感兴趣的基因进行可视化,这里的target_gene以表达矩阵中的第一个基因为例。

代码语言:r
复制
bp=function(g){         #定义一个函数g,函数为{}里的内容
  library(ggpubr)
  df=data.frame(expression = g,group = group_list)
  p <- ggboxplot(df, x = "group", y = "expression",
                 color = "group", palette = "jco",
                 add = "jitter")
  #  Add p-value
  p + stat_compare_means() + ggtitle(target_gene)+
    theme_bw()
}
target_gene=head(rownames(dat),1)
p1 <-  bp(dat[target_gene,])
p1

2.2 样本的PCA图

代码语言:r
复制
exp=t(dat)#画PCA图时要求是行名时样本名,列名时探针名,因此此时需要转换
exp=as.data.frame(exp)#将matrix转换为data.frame 

library("FactoMineR")#画主成分分析图需要加载这两个包
library("factoextra")  
#~~~主成分分析图p2~~~
dat.pca <- PCA(exp , graph = FALSE)
this_title <- paste0(pro,'_PCA')
p2 <- fviz_pca_ind(dat.pca,
                   geom.ind = "point",  #c( "point", "text" ), # show points only (nbut not "text")
                   col.ind = group_list, # color by groups
                   palette = "Dark2",
                   addEllipses = TRUE, # Concentration ellipses
                   legend.title = "Groups")+
  ggtitle(this_title)+ 
  theme(plot.title = element_text(size=12,hjust = 0.5))

p2
ggsave('qc_pca.pdf',width = 5,height = 5)

2.3 方差最大的前1000个基因热图

代码语言:r
复制
cg=names(tail(sort(apply(dat,1,sd)),1000))#apply按行('1'是按行取,'2'是按列取)取每一行的方差,从小到大排序,取最大的1000个
library(pheatmap)
pheatmap(dat[cg,],show_colnames =F,show_rownames = F) #对那些提取出来的1000个基因所在的每一行取出,组合起来为一个新的表达矩阵
n=t(scale(t(dat[cg,]))) # 'scale'可以对log-ratio数值进行归一化
n[n>2]=2 
n[n< -2]= -2
head(n)
pheatmap(n,show_colnames =F,show_rownames = F)
ac=data.frame(Group=group_list)
rownames(ac)=colnames(n)
pheatmap(n,show_colnames =F,show_rownames = F,
         annotation_col=ac)

#~~~top1000热图p3~~~
p3 <- pheatmap::pheatmap(n,
                         show_colnames =F,
                         show_rownames = F,
                         main = pro,
                         annotation_col=ac,
                         breaks = seq(-3,3,length.out = 100))
p3
ggsave('qc_top1000_pheatmap.pdf',plot = p3,width = 5,height = 5)

2.4 组间差异与组内差异的比较

组内的样本的相似性应该是要高于组间的

代码语言:r
复制
#~~~~~corplot~~~~~
cg=names(tail(sort(apply(dat,1,sd)),1000))
exprSet=dat[cg,] # dat
pheatmap::pheatmap(cor(exprSet)) 
# 组内的样本的相似性应该是要高于组间的!
colD=data.frame(Group=group_list)
rownames(colD)=colnames(exprSet)
pheatmap::pheatmap(cor(exprSet),
                   annotation_col = colD,
                   show_rownames = F)
#~~~样品相关性热图p4~~~
p4 <- pheatmap::pheatmap(cor(exprSet),
                         annotation_col = colD,
                         display_numbers = T,
                         show_rownames = F,
                         show_colnames =F,
                         main = pro,
)
p4
ggsave('qc_top1000_corplot.pdf',plot = p4,width = 5,height = 5)

可以拼图总体展示

代码语言:r
复制
p_check <- (p1+p2+as.ggplot(p3)+as.ggplot(p4)+
              plot_layout(widths = c(2.5,1.5,4.5,4.5)))
p_check
path='./'
ggsave(plot = p_check,# path = file.path(path,'plot'),
       'check_plot.pdf',width = 18,height = 4)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 转录组-样品表达总体分布及质控可视化
    • 1 总体分布
      • 1.1 箱式图
      • 1.2 小提琴图
      • 1.3 概率密度分布图
    • 2 质量控制
      • 2.1 单独的基因可视化
      • 2.2 样本的PCA图
      • 2.3 方差最大的前1000个基因热图
      • 2.4 组间差异与组内差异的比较
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档