【问题标题】:How to map numbers to colours?如何将数字映射到颜色?
【发布时间】:2013-04-25 11:44:20
【问题描述】:

我正在尝试将此文件(无符号字符,像素 =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,1] 然后将它们乘以颜色数 -1(使用 +1 以避免 0 索引),并使用它来索引颜色.对于图像,它更容易一些,因为您可以为 image() 使用 break 和 cols 参数。

标签: r plot raster


【解决方案1】:

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

现在我们将这个RasterLayer 定义为ratify 的一个因子。你 应该使用您的信息而不是LETTERS来更改其级别:

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

最后,这个分类 RasterLayer 可以显示为 rasterVis package 的 levelplot 方法。

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)

已编辑:levelplot 使用 lattice 图形,而 plot 使用 base 图形。它们不能一起使用(除非您使用 gridBase 包)。但是,您可以轻松地叠加其他 使用 +.trellis 和 layer 函数的信息 latticeExtra 包。由于wrld_simpl 是 SpatialPolygonsDataFrame 你可以使用sp.polygons 函数 从sp 包中绘制它。

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

【讨论】:

  • @ZadSim 抱歉,我不明白你所说的“k”是什么意思。
  • @ZadSim 我已经添加了一个额外的块代码来解决这个问题。
【解决方案2】:

首先,没有代码可以使用“连续”配色方案,因为所有数据都是数字化和量化的。
现在,R 中有很多内置的颜色模式。请参阅?image,了解用于地图等的一些常用调色板的讨论。如果您的地图数据具有各种土壤类型的离散数值范围,那么您可以通过一些缩放数学来为每个类别应用不同的颜色。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 在您的问题中,y 不是栅格图层。
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2010-10-04
    • 2012-03-19
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多