因?yàn)橐恢睕]有認(rèn)真學(xué)習(xí)過R,都是用到啥去查找啥的,所以每次畫圖總覺得力不從心。最近加了個群,準(zhǔn)備跟著群主大咖認(rèn)真系統(tǒng)的學(xué)習(xí)一些常見圖形。
今天就學(xué)習(xí)一下我們最常用的普通熱圖以及環(huán)形熱圖的畫法。
這個是我們今天用的測試數(shù)據(jù):

普通熱圖還是用常用的pheatmap包:
library(pheatmap)
data <- as.matrix(read.table("data.txt",row.names = 1,header = T,sep = "\t"))?
pheatmap(data) //下面就是默認(rèn)的色系畫出的圖

其它重要的參數(shù)設(shè)置:
1.?scale="row" //設(shè)置是按行或者列標(biāo)準(zhǔn)化
比如下面就是設(shè)置了按行進(jìn)行標(biāo)準(zhǔn)化
pheatmap(data,scale="row")

2. cluster_rows=F,cluster_cols=F? ?//這2個參數(shù)設(shè)置要不要對行或者列進(jìn)行聚類
fontsize_row=15,fontsize_col=20,angle_col=315? //這幾個參數(shù)則是設(shè)置行名,列名的大小和角度
pheatmap(data,scale="row",cluster_rows=F,cluster_cols=F,fontsize_row=15,fontsize_col=20,angle_col=315)

3.?annotation_row,annotation_col? //添加注釋文件
annotation_col <- data.frame(Sample=factor(c("A","B","C","D","E","F","G","H","I","J")))
rownames(annotation_col)<-colnames(data)
annotation_row <- data.frame(CellType=rep(c("A","B"),9))
rownames(annotation_row)<-rownames(data)

annotation_col <- data.frame(Sample=factor(c("A","B","C","D","E","F","G","H","I","J")),Sex=rep(c("F","M"),5))
rownames(annotation_col)<-colnames(data)
pheatmap(data,annotation_col=annotation_col)

3. ann_colors //自定義annoation的顏色
annotation_col <- data.frame(Sample=factor(c("A","B","C","D","E","F","G","H","I","J")),Sex=rep(c("F","M"),5))
rownames(annotation_col)<-colnames(data)
annotation_row <- data.frame(CellType=rep(c("T1","T2"),9))
rownames(annotation_row)<-rownames(data)
ann_colors = list(Sex = c(F = "red", M = "#016D06"),CellType= c(T1 = "#1B9E77", T2 = "#D95F02"),Sample = c(A = "#65B99F", B = "#F08961", C = "#8A9BC3", D = "#DA85B5", E = "#A1CC56",F = "#F5D239", G = "#7CC07B", H = "#BAABD0", I = "#3766A4", J = "#DF3078"))
pheatmap(data,annotation_col=annotation_col,annotation_row=annotation_row,annotation_colors=ann_colors)

4. 當(dāng)然還有一些其他重要的參數(shù):
color? //可以自己設(shè)置heatmap的色系
cellwidth=30,cellheight=14? //設(shè)置單元格的寬度和高度
border_color=F? //設(shè)置顯示不顯示邊界線
display_numbers=T? //設(shè)置顯示heatmap上面的數(shù)字
例如下圖是對參數(shù)進(jìn)行一系列調(diào)整的結(jié)果:
pheatmap(data,annotation_col=annotation_col,annotation_row=annotation_row,annotation_colors=ann_colors,fontsize_col=8,fontsize_row=10,angle_col=45,cellwidth=30,cellheight=14,display_numbers=T,border_color=F,color=colorRampPalette(c("#FDEBEA","#D5281F"))(100))

環(huán)形熱圖我見paper中也有用的,但是總覺得沒普通的好用,并且如果變量太多的時候還不夠直觀。主要是基于ggtree和gheatmap實(shí)現(xiàn)的。
library(ggtree)
library(ggplot2)
data <- as.matrix(read.table("data.txt",row.names = 1,header = T,sep = "\t"))
df <- hclust(dist(data))
p1 <- ggtree(df)
gheatmap(p1,data)
p2 <- ggtree(df,layout = "circular")
p3 <- rotate_tree(p2,100) //設(shè)置旋轉(zhuǎn)角度
gheatmap(p3 + geom_tiplab(offset = 13),data,
? ? ? ? width = 1.5,? ? //熱圖的寬度
? ? ? ? low = "#FDEBEA",
? ? ? ? high = "#D5281F",? //low和high主要設(shè)置熱圖的色系
? ? ? ? font.size = 3,
? ? ? ? colnames_position = "top",? ??
? ? ? ? colnames_offset_y = 2.5,? ? //調(diào)整開口的大小
? ? ? ? hjust = 0? ? ?//調(diào)整列名和頂部的距離
? ? ? ? ) +
theme(legend.position = "right")
