这是一个六边形热图可视化程序,主要用到的知识RColorBrewer,fields,也就是R中的可视化绘图库。
本文希望SOM的结果以六边形热图可视化。让我向您展示如何在R中创建六边形热图!
您必须根据自组织神经网络(SOM)的结果来创建自己的变量 。输入变量 Heatmap_Matrix
变量是一个矩阵,可以作为热图的数字表示。
可下载资源
因此,矩阵具有与SOM映射相同的行数和与SOM映射相同的列数,并且热图中的每个值表示一个六边形的值。
热图的作用主要是2个:1是对实验数据进行质制和差异数据的展现。例如每个小方格表示每个基因,其颜色表示该基因表达量大小,表达量越大颜色越深(红色为上调,绿色为下调)。每行表示每个基因在不同样本中的表达量情况,每列表示每个样品中所有基因的表达量情况。
在文章中,热图通常有两大作用:数据质量控制和直观展示重点研究对象的差异变化情况。
如何使用R软件和ggplot2包可视化相关矩阵。
1. 数据准备
以下示例中mtcars的数据被使用。
1 |
mydata <- mtcars[, c(1,3,4,5,6,7)]head(mydata)12 |
输出结果如下:
1 |
mpg disp hp drat wt qsecMazda RX4 21.0 160 110 3.90 2.620 16.46Mazda RX4 Wag 21.0 160 110 3.90 2.875 17.02Datsun 710 22.8 108 93 3.85 2.320 18.61Hornet 4 Drive 21.4 258 110 3.08 3.215 19.44Hornet Sportabout 18.7 360 175 3.15 3.440 17.02Valiant 18.1 225 105 2.76 3.460 20.221234567 |
2. 计算相关矩阵
可以使用R语言中的cor()函数创建相关矩阵:
1 |
cormat <- round(cor(mydata),2)head(cormat)12 |
输出结果如下:
1 |
mpg disp hp drat wt qsecmpg 1.00 -0.85 -0.78 0.68 -0.87 0.42disp -0.85 1.00 0.79 -0.71 0.89 -0.43hp -0.78 0.79 1.00 -0.45 0.66 -0.71drat 0.68 -0.71 -0.45 1.00 -0.71 0.09wt -0.87 0.89 0.66 -0.71 1.00 -0.17qsec 0.42 -0.43 -0.71 0.09 -0.17 1.001234567 |
3. 使用ggplot2创建相关矩阵的热图
使用reshape2包中的melt()函数将数据“融合”:
1 |
library(reshape2)melted_cormat <- melt(cormat)head(melted_cormat)123 |
输出结果:
1 |
Var1 Var2 value1 mpg mpg 1.002 disp mpg -0.853 hp mpg -0.784 drat mpg 0.685 wt mpg -0.876 qsec mpg 0.421234567 |
ggplot2包中的geom_tile()函数可用于可视化相关矩阵:
1 |
library(ggplot2)ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + geom_tile()123 |
输出结果:
默认的绘图很不美观,将在下一节中看到如何更改热图的外观。
这里 [1,1]
将成为左下节点(第一行,第一列),[1,2]
将成为右侧的节点, 将成为 [2,1]
第二行中左侧的第一个节点,依此类推。
因此,从视觉上看,顺序从左下到右上,而在矩阵中,则从左上到右下。
您必须根据自组织神经网络(SOM)的结果来创建自己的变量 。
输入变量 Heatmap_Matrix
变量是一个矩阵,可以作为热图的数字表示。
因此,矩阵具有与SOM映射相同的行数和与SOM映射相同的列数,并且热图中的每个值表示一个六边形的值。这里 [1,1]
将成为左下节点(第一行,第一列),[1,2]
将成为右侧的节点, 将成为 [2,1]
第二行中左侧的第一个节点,依此类推。因此,从视觉上看,顺序从左下到右上,而在矩阵中,则从左上到右下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
library(RColorBrewer) #使用brewer.pal library(fields) #使用designer.colors #为每个六角形创建多边形的功能 #从一个矩阵开始,该矩阵将作为您的热图的数字表示形式,称为Heatmap_Matrix x <- as.vector(map_Matrix) #此矩阵具有与SOM映射相同的行数和与SOM映射相同的列数,并且热图中的每个值表示一个六边形的值 #在这里[1,1]将成为左下节点(第一行,第一列),[1,2]将成为右节点[2,1]将成为第二行左侧的第一个节点 #因此,从视觉上看,可以从左下到右上工作 #SOM的行数和列数 Rows <- dim(map_Matrix)[1] Columns <- dim(map_Matrix)[2] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#为图例腾出空间 par(mar = c(0.2, 2, 2, 7)) #启动绘图窗口,但确实显示绘图上的所有轴或点 plot(0, 0, type = "n", axes = FALSE, xlim=c(0, Columns), ylim=c(0, Rows), xlab="", ylab= "", asp=1) #创建调色板 #我使用designer.colors在Brewer中允许的最大数量的数值之间插入50种颜色 ColRamp <- rev(designer.colors(n=50, col=brewer.pal(9, "Spectral") ) #制作一个向量,其长度(ColRamp)的bin数在x的最小值与最大值之间. #接下来,将x中的每个点与ColorRamp中的一种颜色进行匹配 ColorCode <- rep("#FFFFFF", length(x)) #默认为全白 for (i in 1:length(x)) if (!is.na(x[i])) ColorCode[i] <- ColRamp[which.min(abs(Bins-x[i]))] #在图上实际绘制六角形多边形 offset <- 0.5 #向上移动时六边形的偏移量 for (row in 1: Rows) { for (column in 0:( Columns - 1)) agon(column + offset, row - 1, col = ColorCode[row + Rows * column]) offset <- ifelse(offset, 0, 0.5) } #在右侧添加图例 image(legend.only=TRUE, col=ColRamp, zlim=c(min(x, na.rm=T), max(x, na.rm=T))) |
能够读取颜色含义的图例
在最后,创建图例,您将获得与上图类似的热图。
希望我的解释和代码能帮助您在R中创建自己漂亮的热图。