即使已经有了答案,也许这种不同的方法将是一个很好的补充.使用代码,您可以创建类似于下面的热图

我从围绕kohonen包编写的更广泛的程序中获取了这段代码.你可以在这里找到我对该程序的完整解释:http://nbremer.blogspot.nl/2013/07/on-creation-of-extended-self-organizing.html
它是一个位编码,你需要从一个特定的变量开始:输入<<Heatmap matrix variable>>是一个矩阵,它将是你热图的数字表示.这里[1,1]将成为左下节点(第1行,第1列),[1,2]将成为右边的节点,[2,1]将成为第2行左边的第一个节点等等,从视觉上你可以在热图中从左下角到右上角工作,而在矩阵中你从左上角到右下角工作
library(RColorBrewer) #to use brewer.pal
library(fields) #to use designer.colors
#Function to create the polygon for each hexagon
Hexagon <- function (x, y, unitcell = 1, col = col) {
polygon(c(x, x, x + unitcell/2, x + unitcell, x + unitcell,
x + unitcell/2), c(y + unitcell * 0.125, y + unitcell *
0.875, y + unitcell * 1.125, y + unitcell * 0.875,
y + unitcell * 0.125, y - unitcell * 0.125),
col = col, border=NA)
}#function
#Start with a matrix that would be the numerical representation of you heatmap
#Here [1,1] will become the lower left node (1st row, 1st column),
#[1,2] will become the node to the right
#[2,1] will be the first node to the left in the second row
#So visually you work your way from bottom left to top right
x <- as.vector(<<Heatmap matrix variable>>)
#Number of rows and columns of your SOM
SOM_Rows <- dim(<<Heatmap matrix variable>>)[1]
SOM_Columns <- dim(<<Heatmap matrix variable>>)[2]
#To make room for the legend
par(mar = c(0.4, 2, 2, 7))
#Initiate the plot window but do show any axes or points on the plot
plot(0, 0, type = "n", axes = FALSE, xlim=c(0, SOM_Columns),
ylim=c(0, SOM_Rows), xlab="", ylab= "", asp=1)
#Create the color palette
#I use designer.colors to interpolate 50 colors between
#the maxmimum number of allowed values in Brewer
ColRamp <- rev(designer.colors(n=50, col=brewer.pal(9, "Spectral")))
#Make a vector with length(ColRamp) number of bins between the minimum and
#maximum value of x.
#Next match each point from x with one of the colors in ColorRamp
ColorCode <- rep("#FFFFFF", length(x)) #default is all white
Bins <- seq(min(x, na.rm=T), max(x, na.rm=T), length=length(ColRamp))
for (i in 1:length(x))
if (!is.na(x[i])) ColorCode[i] <- ColRamp[which.min(abs(Bins-x[i]))]
#Actual plotting of hexagonal polygons on map
offset <- 0.5 #offset for the hexagons when moving up a row
for (row in 1:SOM_Rows) {
for (column in 0:(SOM_Columns - 1))
Hexagon(column + offset, row - 1, col = ColorCode[row + SOM_Rows * column])
offset <- ifelse(offset, 0, 0.5)
}
#Add legend to the right if you want to
image.plot(legend.only=TRUE, col=ColRamp, zlim=c(min(x, na.rm=T), max(x, na.rm=T)))
Run Code Online (Sandbox Code Playgroud)