2020-03-07 作业热图的绘制

今天的作业

首先去到https://mp.weixin.qq.com/s/ZcOPNzcj1EZhrHPfUZfwyQ
找到数据集的相关信息:GSE101668
样本信息为:

GSM2711785    RKO-WT-rep1
GSM2711786    RKO-WT-rep2
GSM2711787    RKO-PRDM1-KO2-rep1
GSM2711788    RKO-PRDM1-KO2-rep2
GSM2711789    RKO-PRDM1-KO5-rep1
GSM2711790    RKO-PRDM1-KO5-rep2
GSM2711791    RKO-GFP-OE-rep1
GSM2711792    RKO-GFP-OE-rep2
GSM2711793    RKO-PRDM1α-OE-rep1
GSM2711794    RKO-PRDM1α-OE-rep2
GSM2711795    RKO-PRDM1β-OE-rep1
GSM2711796    RKO-PRDM1β-OE-rep2

这样本不多,分组倒是挺多的。要完成作业需要表达矩阵信息,但是我用getGEO,geoChina都下载不来原始表达矩阵信息,那就只能下载GSE101668_RAW.tar自己拼接了。
先打开开了一下这个压缩包里面有2种信息,每个样本有2个压缩包,一个是.genes.fpkm,另一个是.counts.genes我就直接选择后面的数据合并。
把曾老师的代码修修改改就得到了表达矩阵和临床信息

#数据下载
rm(list = ls())
options(stringsAsFactors = F)
list.files('countsFiles/')

a=read.table('countsFiles/GSM2711785_WT1.counts.genes.txt.gz',
             header = T,sep = '\t',row.names = 1) 
head(a)
a=do.call(cbind,lapply(list.files('countsFiles/'), function(x){
  read.table(file.path('countsFiles',x),
             header = T,sep = '\t',row.names = 1)[,1]
}))
a[1:4,1:4]
rownames(a)=rownames(read.table('countsFiles/GSM2711785_WT1.counts.genes.txt.gz',
                                header = T,sep = '\t',row.names = 1))
colnames(a)=gsub('.counts.genes.txt.gz','',list.files('countsFiles/'))
library(stringr)
a1=read.table("sample")
rownames(a1)=a1[,1]
sample_name=a1[,-1]
names(sample_name)=rownames(a1)
group=as.data.frame(sample_name)
k1=str_detect(group$sample_name,"RKO-WT")
k2=str_detect(group$sample_name,"RKO-PRDM1-KO2")
k3=str_detect(group$sample_name,"RKO-PRDM1-KO5")
k4=str_detect(group$sample_name,"RKO-GFP-OE")
k5=str_detect(group$sample_name,"RKO-PRDM1α-OE")

group$subtype=ifelse(k1,"RKO-WT",ifelse(k2,"RKO-PRDM1-KO2",
                                           ifelse(k3,"RKO-PRDM1-KO5",
                                                  ifelse(k4,"RKO-GFP-OE",
                                                         ifelse(k5,"RKO-PRDM1α-OE","RKO-PRDM1β-OE")))))
colnames(a)=rownames(group)
a[1:4,1:4]
boxplot(a)
exprSet=a
boxplot(log2(edgeR::cpm(exprSet)+1),las=2)
print(dim(exprSet))
exprSet=exprSet[apply(exprSet,1, 
                      function(x) sum(x>1) > floor(ncol(exprSet)/10)),]
print(dim(exprSet))

library(stringr)
colnames(exprSet) 
subtype=group$subtype
table(subtype)

k1=str_detect(group$subtype,"WT")
k2=str_detect(group$subtype,"-OE")


group$group_list=ifelse(k1,"WT",ifelse(k2,"OE","KO"))
group_list=group$group_list
table(group_list)
colD=group[,-1]
colnames(colD)=c("group_list","subtype")
table(colD)
save(exprSet,colD,file = 'input.Rdata')
#(1)提取表达矩阵exp
exp <- exprSet
exp[1:4,1:4]
exp = log2(exp+1)
exp[1:4,1:4]
#(2)提取临床信息
pd <- colD
#(3)调整pd的行名顺序与exp列名完全一致
p = identical(rownames(pd),colnames(exp));p
if(!p) exp = exp[,match(rownames(pd),colnames(exp))]

这里面有2个坑,一个是分组获取"WT","OE","KO"过程中用ifelse函数的时候先进行WT和"-OE"的判断,不然容易出错。另一个是一开始我弄错了分类,后面又重新赋值了,懒得改,反正记录下来,以后就知道了。
得到验证过的表达矩阵信息就好办了下面就是绘图了。
同样是套用代码

rm(list = ls())  ## 魔幻操作,一键清空~
options(stringsAsFactors = F)
load(file = 'input.Rdata')
# 每次都要检测数据
dat=log2(edgeR::cpm(exprSet)+1)
dat[1:4,1:4]
group_list=colD$subtype
table(group_list)

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
n[1:4,1:4]
pheatmap(n,show_colnames =F,show_rownames = F)
ac=data.frame(subtype=group_list)
rownames(ac)=colnames(n) #把ac的行名给到n的列名
pheatmap(n,show_colnames =F,show_rownames = F,
         annotation_col=ac,filename = 'heatmap_top1000_sd.png')


rm(list = ls())  ## 魔幻操作,一键清空~
options(stringsAsFactors = F)
load(file = 'input.Rdata')
colnames(exprSet)
pheatmap::pheatmap(cor(exprSet)) 
# 组内的样本的相似性应该是要高于组间的!
pheatmap::pheatmap(cor(exprSet),
                   annotation_col = colD,
                   show_rownames = F,
                   filename = 'cor_all.png')
dim(exprSet)
exprSet=exprSet[apply(exprSet,1, function(x) sum(x>1) > 5),]
dim(exprSet)

exprSet=log(edgeR::cpm(exprSet)+1)
dim(exprSet)
exprSet=exprSet[names(sort(apply(exprSet, 1,mad),decreasing = T)[1:500]),]
dim(exprSet)
M=cor(log2(exprSet+1)) 
pheatmap::pheatmap(M,annotation_col = colD)
pheatmap::pheatmap(M,
                   show_rownames = F,
                   annotation_col = colD,
                   filename = 'cor_top500.png')

这就得到了heatmap_top1000_sd和cor_top500的图如下:


heatmap_top1000_sd

cor_top500

还可以套用今天的娟老师的配色来一波

rm(list = ls())  ## 魔幻操作,一键清空~
options(stringsAsFactors = F)
library(pacman)
p_load(pheatmap)
library(getopt)
library(pheatmap)
library(RColorBrewer)
load(file = 'input.Rdata')
# 每次都要检测数据
dat=log2(edgeR::cpm(exprSet)+1)
dat[1:4,1:4]
group_list=colD$subtype
table(group_list)

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
n[1:4,1:4]
pheatmap(n,show_colnames =F,show_rownames = F)
ac=data.frame(subtype=group_list)
rownames(ac)=colnames(n) #把ac的行名给到n的列名
pheatmap(n,show_colnames =F,show_rownames = F,
         annotation_col=ac,filename = 'heatmap_top1000_sd.png')
##------color----
#默认色系:红黄蓝
color.1 <- colorRampPalette(rev(brewer.pal(n = 7, name ="RdYlBu")))(100)
#红黑绿
color.2 <- colorRampPalette(rev(c("#ff0000", "#000000", "#00ff00")))(1000)
#红白蓝
color.3 <- colorRampPalette(rev(c("#ff0000", "#ffffff",  "#0000ff")))(100)
color.set <- list(color.1, color.2,color.3)

pheatmap(n,scale = "row",color = color.1,show_colnames =F,show_rownames = F,
         annotation_col=ac,filename = 'heatmap_top1000_sd1.png')
pheatmap(n,scale = "row",color = color.2,show_colnames =F,show_rownames = F,
         annotation_col=ac,filename = 'heatmap_top1000_sd2.png')
pheatmap(n,scale = "row",color = color.3,show_colnames =F,show_rownames = F,
         annotation_col=ac,filename = 'heatmap_top1000_sd3.png')

可以得到另外2种配色的图:


红黑绿
红白蓝

这个红白蓝的就很讨人喜欢。以后如有需要就直接套用了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容