快速實現是搜索幫助文檔的首要目的,所以此處涉及實戰的文章一概略去傳統幫助文檔的理論部分,直接上代碼加注釋!
本文將介紹R語言下利用ggplot2包制作heatmap的代碼
-------------------------我是分割線-------------------------------
測試數據:
數據中的空白行、列用以分割heatmap,區別不同的數據處理,如不需要刪除即可。
1、制作連續型
1 #引入包 2 library(ggplot2) 3 library(reshape) 4 library(zoo) 5 6 #載入windows下的字體 7 library(extrafont) 8 #loadfonts(device="win") 9 #查看字體庫 10 #fonts() 11 12 #讀取數據 13 mydata <- read.csv("G:\\R\\test\\Book3.csv",sep=",",header=TRUE) 14 mydata 15 16 #數據轉換成 ‘rowname, columnname, value’這樣形式的數據 17 mydata.m <- melt(mydata) 18 19 ##設置圖形樣式 20 theme_change <- theme( 21 #設置xy軸字體樣式、大小等 colour="grey50", 22 axis.text.x=element_text(family = "Arial",size=12, colour="black",angle = 0), 23 axis.text.y=element_text(family = "Arial",size=12, colour="black",face="italic"), 24 axis.title.x=element_text(family = "Arial",angle=0, face="plain", size=14),#font face ("plain", "italic", "bold", "bold.italic") 25 axis.title.y=element_text(family = "Arial",angle=270, face="plain", size=14), 26 axis.line = element_blank(), 27 axis.ticks = element_blank(), 28 #設置圖例字體樣式大小 29 #legend.text 30 #legend.title 31 #legend.position #the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector) 32 #清空背景及xy軸樣式 33 plot.background = element_blank(), 34 panel.grid.minor = element_blank(), 35 panel.grid.major = element_blank(), 36 panel.background = element_blank(), 37 panel.border = element_blank() 38 ) 39 40 ## 輸出圖形 #Arial 41 p <- ggplot(data = mydata.m, aes(x = variable, y = Name, fill = value)) + 42 geom_tile()+ 43 #geom_tile(color="white", size=0.1) + #color="white", size=0.1設置柵格之間的分割線顏色及大小 44 theme_classic() + #去掉灰快 45 theme_change + 46 scale_x_discrete(limits=c("BS","X", "BS1","RS"),labels=c("BS","","BS","RS"))+#x軸排序及標注 47 scale_y_discrete(limits=c("B","C","NA1","Meth1", "Meth2","Meth3","Meth4","NA2","S","G","M"),labels=c("B","C","","Meth1", "Meth2","Meth3","Meth4","","S","G","M"))+ #y軸排序及標注 48 xlab('row name1') + 49 ylab('column name') + #更改行名和列名 50 scale_fill_gradient(na.value='#FFFFFF',low = 'green', high = 'red')+ #修改圖例名字以及圖中顏色 51 #scale_fill_gradient2('legend name', na.value='#FFFFFF',low = '#8856a7', high = '#636363', mid = '#ece7f2')+ #修改圖例名字以及圖中顏色 52 geom_text(aes(label=round(value,2)), family="Arial", angle=0, colour = "black",size=5)#顯示每個柵格的數值及字體設置 53 p 54 55 #legend的設置參見http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/
輸出效果圖:
2、分級別顯示
1 #引入包 2 library(ggplot2) 3 library(reshape) 4 library(zoo) 5 6 #載入windows下的字體 7 library(extrafont) 8 #loadfonts(device="win") 9 #查看字體庫 10 #fonts() 11 12 #讀取數據 13 mydata <- read.csv("G:\\R\\test\\Book3.csv",sep=",",header=TRUE) 14 mydata 15 16 #數據轉換成 ‘rowname, columnname, value’這樣形式的數據 17 mydata.m <- melt(mydata) 18 19 #將現有的value值划分等級 20 quantile_range <- quantile(mydata.m$value, na.rm = TRUE, probs = seq(0, 1, 0.2)) 21 22 #顏色模板 23 color_palette <- colorRampPalette(c("green", "red"))(length(quantile_range) - 1) 24 25 #圖例標簽 26 label_text <- rollapply(round(quantile_range, 2), width = 2, by = 1, FUN = function(i) paste(i, collapse = " : ")) 27 28 #將value值用1,2,3,4...等級代替(用以着色) 29 mod_mat <- matrix(findInterval(mydata.m$value, quantile_range, all.inside = TRUE)) 30 31 32 ##設置圖形樣式 33 theme_change <- theme( 34 #設置xy軸字體樣式、大小等 colour="grey50", 35 axis.text.x=element_text(family = "Arial",size=12, colour="black",angle = 0), 36 axis.text.y=element_text(family = "Arial",size=12, colour="black",face="italic"), 37 axis.title.x=element_text(family = "Arial",angle=0, face="plain", size=14),#font face ("plain", "italic", "bold", "bold.italic") 38 axis.title.y=element_text(family = "Arial",angle=270, face="plain", size=14), 39 axis.line = element_blank(), 40 axis.ticks = element_blank(), 41 #設置圖例字體樣式大小 42 #legend.text 43 #legend.title 44 #legend.position #the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector) 45 #清空背景及xy軸樣式 46 plot.background = element_blank(), 47 panel.grid.minor = element_blank(), 48 panel.grid.major = element_blank(), 49 panel.background = element_blank(), 50 panel.border = element_blank() 51 ) 52 53 ## 輸出圖形 #Arial 54 p <- ggplot(data = mydata.m, aes(mydata.m$variable, mydata.m$Name, fill=factor(melt(mod_mat)$value))) + 55 geom_tile()+ 56 #geom_tile(color="white", size=0.1) + #color="white", size=0.1設置柵格之間的分割線顏色及大小 57 theme_classic() + #去掉灰快 58 theme_change + 59 scale_x_discrete(limits=c("BS","X", "BS1","RS"),labels=c("BS","","BS","RS"))+#x軸排序及標注 60 scale_y_discrete(limits=c("B","C","NA1","Meth1", "Meth2","Meth3","Meth4","NA2","S","G","M"),labels=c("B","C","","Meth1", "Meth2","Meth3","Meth4","","S","G","M"))+ #y軸排序及標注 61 xlab('row name1') + 62 ylab('column name') + #更改行名和列名 63 scale_fill_manual(values = color_palette, name = "Level", labels = label_text) + 64 #scale_fill_gradient(na.value='#FFFFFF',low = 'green', high = 'red')+ #修改圖例名字以及圖中顏色 65 #scale_fill_gradient2('legend name', na.value='#FFFFFF',low = '#8856a7', high = '#636363', mid = '#ece7f2')+ #修改圖例名字以及圖中顏色 66 geom_text(aes(label=round(value,2)), family="Arial", angle=0, colour = "black",size=5)#顯示每個柵格的數值及字體設置 67 p 68 69 #legend的設置參見http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/
輸出效果圖:
--------------------------------我是分割線------------------------------------
轉載請注明出處!