根据标签为网格的颜色方块

Color squares of a grid according to labels

我使用以下代码创建了一个 100x100 的网格:

nb=100
nb1=nb
nb2=nb
minlat=45.18306
maxlat=45.6325
binlat=seq(minlat-0.05, maxlat+0.05, length.out = nb1)
minlon=8.724444
maxlon=9.519722
binlon=seq(minlon-0.05, maxlon+0.05, length.out = nb2)

我的数据分组如下:

n = 100
coord = matrix(0, n, 2)
coord[,1]= runif(100, min=45.18306, max=45.6325)
coord[,2]= runif(100, min=8.724444, max=9.519722)

lab=matrix(0, n, 1)
m=1
for(i in 1:nb1){
  for(j in 1:nb2){
    lab[coord[,1]>binlat[i] & coord[,1]<=binlat[i+1] & coord[,2]>binlon[j] & coord[,2]<=binlon[j+1]]=m
    m=m+1
  }
}

假设我有如下矩阵:

a <- c(1000,2536,3045,6654)
b <- c(1,1,2,3)
matrix <- cbind(a,b)

其中a是标识网格正方形ID的向量,b是正方形所属组的向量。

是否可以用 a 中的正方形根据它们所属的组着色来可视化网格? 所有未包含在a中的方块必须是non-colored/white.

您可以使用 expand.grid 获取构成网格的所有唯一 x 和 y 值的数据框。

df <- expand.grid(x = binlon, y = binlat)

这将按顺序为您提供每个 y 值处的所有 x 值:

head(df)
#>          x        y
#> 1 8.674444 45.13306
#> 2 8.683487 45.13306
#> 3 8.692530 45.13306 
#> 4 8.701574 45.13306
#> 5 8.710617 45.13306
#> 6 8.719660 45.13306

...依此类推 10,000 行。

如果您的 a 列表示具有此排序的单元格的矩阵位置,那么您可以通过以下操作用组标记正确的单元格:

df$group <- NA_real_
df$group[matrix[,'a']] <- matrix[,'b']
df$group <- factor(df$group)

(如果这与您的意图相悖,只需颠倒 expand.grid 中参数的顺序即可)

使用 ggplot

绘制结果可能是最简单的
library(ggplot2)

ggplot(df, aes(x, y, fill = group)) + 
  geom_tile(colour = 'gray90') +
  scale_fill_brewer(palette = 'Set1', na.value = 'white')