如何在R语言中建立六边形矩阵热图heatmap可视化

这是一个六边形热图可视化程序,主要用到的知识RColorBrewer,fields,也就是R中的可视化绘图库。

由Kaizong Ye,Weilong Zhang撰写

本文希望SOM的结果以六边形热图可视化。让我向您展示如何在R中创建六边形热图!


您必须根据自组织神经网络(SOM)的结果来创建自己的变量 。输入变量 Heatmap_Matrix 变量是一个矩阵,可以作为热图的数字表示。


因此,矩阵具有与SOM映射相同的行数和与SOM映射相同的列数,并且热图中的每个值表示一个六边形的值。 

×

热图的作用主要是2个:1是对实验数据进行质制和差异数据的展现。例如每个小方格表示每个基因,其颜色表示该基因表达量大小,表达量越大颜色越深(红色为上调,绿色为下调)。每行表示每个基因在不同样本中的表达量情况,每列表示每个样品中所有基因的表达量情况。

在文章中,热图通常有两大作用:数据质量控制和直观展示重点研究对象的差异变化情况。

如何使用R软件和ggplot2包可视化相关矩阵。

1. 数据准备

以下示例中mtcars的数据被使用。

mydata <- mtcars[, c(1,3,4,5,6,7)]head(mydata)12

输出结果如下:

                   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()函数创建相关矩阵:

cormat <- round(cor(mydata),2)head(cormat)12

输出结果如下:

       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()函数将数据“融合”:

library(reshape2)melted_cormat <- melt(cormat)head(melted_cormat)123

输出结果:

  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()函数可用于可视化相关矩阵:

library(ggplot2)ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) +   geom_tile()123

输出结果:
在这里插入图片描述

默认的绘图很不美观,将在下一节中看到如何更改热图的外观。





这里 [1,1] 将成为左下节点(第一行,第一列),[1,2] 将成为右侧的节点, 将成为 [2,1] 第二行中左侧的第一个节点,依此类推。

因此,从视觉上看,顺序从左下到右上,而在矩阵中,则从左上到右下。

您必须根据自组织神经网络(SOM)的结果来创建自己的变量 。


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加

 
输入变量 Heatmap_Matrix 变量是一个矩阵,可以作为热图的数字表示。 

因此,矩阵具有与SOM映射相同的行数和与SOM映射相同的列数,并且热图中的每个值表示一个六边形的值。这里 [1,1] 将成为左下节点(第一行,第一列),[1,2] 将成为右侧的节点, 将成为 [2,1] 第二行中左侧的第一个节点,依此类推。因此,从视觉上看,顺序从左下到右上,而在矩阵中,则从左上到右下。


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]



 
#为图例腾出空间
 
 
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中创建自己漂亮的热图。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds