如何将数字映射到颜色?

问题描述:

我正在试图将此文件(无符号字符,像素= 1440和行= 720)视为一张地图。我试了一下给出的代码段。首先,我下载的问题可能是这个代码使用了连续的配色方案,即使我有离散数据(这是一个分类方案)。如何将数字映射到颜色?请通缉规模的 例子如下所示:如何将数字映射到颜色?

所有,没有代码可以使用“连续”的颜色方案
conne <- file("C:\\landcover.bin", "rb") 
dfr<- readBin(conne, integer(), size=1, n=720*1440, signed=F) 

y<-matrix((data=dfr), ncol=1440, nrow=720) 
image(y) 
+0

通常,可以扩展您的值代入[0,1]然后,通过颜色的数量乘以-1的那些(具有1至避免0的索引),并用它来索引变成颜色。对于图像来说,这样会更容易一些,因为您可以使用image()的间隔和cols参数。 – mdsumner 2013-04-25 23:27:45

raster包提供了一种使用分类 数据的方法。详情请阅读ratify的帮助页面。

首先,让我们创建与你的数据RasterLayer

library(raster) 

dfr <- readBin('biome1440s.bin', integer(), size=1, n=720*1440, signed=F) 
r <- raster(nrow=720, ncol=1440) 
r[] <- dfr 

现在我们定义这个RasterLayerratify一个因素。您应该 使用您的信息,而不是LETTERS改变其等级:

r <- ratify(r) 
rat <- levels(r)[[1]] 
rat$soil <- LETTERS[1:15] 
levels(r) <- rat 

最后,这绝对RasterLayer可以 的rasterVispackagelevelplot方法来显示。

library(rasterVis) 
myPal <- c('lightblue', terrain.colors(14)) 
## using par.settings 
levelplot(r, par.settings=rasterTheme(region=myPal)) 
## or with col.regions 
levelplot(r, col.regions=myPal) 

world land uses

编辑:levelplot使用lattice图形,而plot使用 base图形。它们不能一起使用(除非您使用 gridBase包)。但是,可以使用 latticeExtra程序包中的+.trellislayer函数轻松地覆盖其他 信息。由于wrld_simplSpatialPolygonsDataFrame您可以使用sp包中的sp.polygons函数 对其进行绘制。

library(maptools) ## needed for wrld_simpl 
data(wrld_simpl) ## a SpatialPolygonsDataFrame 
levelplot(r, col.regions=myPal) + 
    layer(sp.polygons(wrld_simpl, lwd=0.5)) 

wrld_simpl

+0

@ZadSim对不起,但我不明白你的意思是“k”。 – 2013-04-29 09:38:36

+1

@ZadSim我已经添加了一个额外的块代码来解决这个问题。 – 2013-04-29 20:07:39

首先,因为所有的数据是数字和量化。
现在,R中有许多内置颜色模式。有关用于地图等的一些常用调色板的讨论见?image。如果您的地图数据对于不同的土壤类型具有离散的数值范围,则使用小比例数学可以为每个类别应用不同的颜色。

或者你可以使用优秀的ggplot2软件包。这有geom_raster几何,它应该适用于您的数据。请注意,ggplot2要求其数据的格式与矩阵不同,可以使用reshape2包中的melt执行此转换。另请参阅我对an earlier question的回答,它与您拥有很多相似之处。

+0

在你的问题y不是栅格图层。 – 2013-04-25 14:20:13