今天我們就分別來說說這5個(gè)R包畫熱圖的方法。先從heatmap函數(shù)說起。
一、heatmap函數(shù)
heatmap(temp,col=colorRampPalette(c('green','black','red'))(12),ColSideColors=colorRampPalette(c('green','black','red'))(12),Colv=NA,cexRow=0.8,cexCol=1.2)
Col指定熱圖所用顏色:
ColSideColors/RowSideColors代表列、行邊是否顯示顏色bar
ColV/RowV表示是否按照列/行聚類,默認(rèn)均為真值
cexCol/cexRow分別表示列/行標(biāo)簽字體大小
scale=c('row','column','none')#設(shè)置是否歸一化
margins=c(5,5)#設(shè)置熱圖下方及右方寬度
若熱圖中對(duì)于樣本有多種分組,需要在行/列帝顯示兩行或多行顏色bar,可選擇heatmap.plus或pheatmap包
二、pheatmap包
cellwidth、cellheigh t#小方格寬度、高度
scale='none' ##是否歸一化
cluster_rows、cluster_cols #是否按行、列聚類
treeheight_row、treeheight_col #橫向、縱向樹高度
legend、annotation(設(shè)置分組)等高級(jí)選項(xiàng)見后面
display_numbers=TRUE #在小方格中顯示數(shù)字
1、無參數(shù)(結(jié)果如右圖1)
pheatmap(temp)
2、設(shè)置col、row方向的樹高(結(jié)果如右圖2)
pheatmap(temp,treeheight_row=120,treeheight_col=20))
3、單一方向聚類(右圖1)
pheatmap(temp,treeheight_row=120,treeheight_col=20,cluster_cols=FALSE)
4、更改顏色(右圖2)
pheatmap(temp,treeheight_row=120,treeheight_col,cluster_cols=FALSE,color=colorRampPalette(c('green','black','red'))(1000))
5、去掉方格邊框、調(diào)節(jié)字體大小、保存(右圖1)
pheatmap(temp,treeheight_row=120,treeheight_col=20,cluster_cols=FALSE,color=colorRampPalette(c('green','black','red'))(5),border_color=NA,fontsize=10,fontsize_row=8,fontsize_col=16,filename='fig1.pdf',width=6,height=14)
treeheight_col、treeheight_row分別為縱向、橫向樹形高度
border_color方格邊框顏色
fontsize為所有字體大小,fontsize_row、fontsize_col分別為row、col方向標(biāo)簽字體大小
6、設(shè)置多個(gè)分組
pheatmap(temp,cluster_cols=FALSE,cluster_rows=TRUE,legend=TRUE,color=colorRampPalette(c('green','black','red'))(1000),border_color=FALSE,fontsize=10,fontsize_row=12,fontsize_col=12,annotation=anno,annotation_legend=TRUE,annotation_colors=anno_colors)
annotation是一個(gè)dataframe,它的每行代表一個(gè)列(樣本)的信息,包括每一列(樣本)所屬的group名,它的colnames代表分組名,rownames為列(樣本)名;annotation_colors是list,每個(gè)列表元素代表一個(gè)級(jí)別,包括分組中各組名稱以及對(duì)應(yīng)的顏色值。
7、不聚類
pheatmap(temp,cluster_col=FALSE,cluster_rows=FALSE,legend=FALSE,color=colorRampPalette(c('green','black','red'))(1000),border_color=TRUE,fontsize=10,fontsize_row=12,fontsize_col=12,filename='fig1.png',width=6,height=14)
8、不聚類、填充數(shù)字
pheatmap(temp,cluster_col=FALSE,cluster_rows=FALSE,legend=FALSE,color=colorRampPalette(c('green','black','red'))(1000),border_color=TRUE,fontsize=10,fontsize_row=12,fontsize_col=12,display_numbers=TRUE,number_format='%.2f',filename='fig1.png',width=6,height=14)
三、ggplot2包
(可對(duì)熱圖進(jìn)行聚類,但不可畫樹)
所需包ggplot2、reshape2
library('ggplot2')
library('reshape2')
##首先分別對(duì)數(shù)據(jù)temp在行/列方向上聚類,并保存聚類后的行列順序
hc=hclust(dist(temp))
row_order=hc$order
temp1=temp[row_order,] ###是否對(duì)行列進(jìn)行聚類
temp1=melt(temp1) ###數(shù)據(jù)變換,從matrix到ggplot可以識(shí)別的類型
p<> #指定橫縱坐標(biāo)、填充值
xlab('')+ylab('')+labs(title='')+geom_tile(colour='white',size=0)+scale_fill_grandient(low='green',high='red')+ ###定義填充顏色
geom_text(aes(label=round(value,2)),angel=45,size=3) ###加數(shù)字
print(p)
四、gplots包(heatmap.2)
scale按行或列均一化('col'或'row')
Rowv、Colv是否對(duì)行、列聚類
dendrogram是否繪制樹形(none、both、row、col)
margins設(shè)置下方、右方label寬度(eg:margins=c(5,7))
ColSideColors,RowSideColors設(shè)置列、行分組顏色(顏色分別對(duì)應(yīng)各列、各行)
示例代碼(右圖):
library('gplots')
group=colorRampPalette(c('green','red'))(12)
#12種表示分組關(guān)系的顏色
heatmap.2(temp,col=redgreen,Colv=FALSE,ColSideColors=group,key=TRUE,symkey=FALSE,density.info='none',trace='none')
五、lattice包
所需包lattice、latticeExtra
colorkey=list(space='left',width=1.5) #設(shè)置顏色條的寬度和位置(top、left、right、bottom,但不可以與樹形放置在同一側(cè))
legend=list(...) #在圖上的頂部或右部添加聚類樹(僅可以在右方或上方加),并定義樹形狀(type參數(shù)指定:三角形triangle或矩形<默認(rèn)>默認(rèn)>)
levelplot(t(data),aspect='fill',...) ###data為matrix
示例代碼(右圖):
library('lattice')
library(latticeExtra)
hc=hclust(dist(temp)) ###按行聚類
dd.row=as.dendrogram(hc) ###保存行聚類樹形
row.ord=order.dendrogram(dd.row) ###保存行聚類順序
hc=hclust(dist(t(temp))) ###按列聚類
dd.col=as.dendrogram(hc) ###保存列聚類樹形
col.rod=order.dendrogram(dd.col) ###保存列聚類順序
temp1=temp[row.ord,] ###只對(duì)行聚類(是否對(duì)行、列聚類)
levelplot(t(temp1),aspect='fill',colorkey=list(space='left',width=1.5),xlab='',ylab='',legend=list(right=list(fun=dendrogramGrob,args=list(x=dd.row,rod=row.ord,side='right',size=5)),
scales=list(x=list(rot=60)) ###x軸標(biāo)簽旋轉(zhuǎn)60度
今天的干貨分享到這里了,如果覺得鼓搗代碼太麻煩了,可以試著用云平臺(tái)的熱圖工具畫呀(嘻嘻,不打個(gè)廣告小編渾身不自在)。
聯(lián)系客服