【问题标题】:How to store the colors of SpatialPolygons in R如何在 R 中存储 SpatialPolygons 的颜色
【发布时间】:2013-12-25 10:20:36
【问题描述】:

下面的代码是一个小例程的一部分,用于存储地图上使用的颜色图例。

主要功能是不使用 PLOT 函数或 LEGEND 函数,而是生成构成 LEGEND 的多边形并将其保存为 shapefile。

contour <- bbox(mapa)
polBorder <- polygonBox(contour, scale=0.0002)
boxBorder <- bbox(polBorder)

polLeg <- list()

xmin <- boxBorder["x", "min"] + 0.0005
ymin <- boxBorder["y", "min"] + 0.0005
sizex = abs(boxBorder["x", "max"]-boxBorder["x", "min"])/20
sizey = abs(boxBorder["y", "max"]-boxBorder["y", "min"])/20

for (i in 1:7)
{
  polygon <- polygonBoxPos2(xmin, ymin, +sizex, +sizey, paste0("p",i))

  polLeg <- append(polygon, polLeg)

  ymin <- ymin + sizey

}

SdP = SpatialPolygons(polLeg)

plot(polBorder, border="black" )
plot(SdP, add=TRUE )
plot(mapa, col=colPalette,  add=TRUE)

polygonBox <- function (bbox, scale=0.0)
{

  bbox["x", "min"] <- bbox["x", "min"] + scale*bbox["x","min"]
  bbox["x", "max"] <- bbox["x", "max"] - scale*bbox["x","max"]

  bbox["y", "min"] <- bbox["y", "min"] + scale*bbox["y","min"]
  bbox["y", "max"] <- bbox["y", "max"] - scale*bbox["y","max"]

  Sr1 = Polygon(cbind(c(bbox["x","min"],bbox["x","max"],bbox["x","max"],bbox["x","min"],bbox["x","min"]),
                      c(bbox["y","min"],bbox["y","min"],bbox["y","max"],bbox["y","max"],bbox["y","min"]))
                , hole=TRUE)
  Srs1 = Polygons(list(Sr1), "s1")
  SdP = SpatialPolygons(list(Srs1))
  return(SdP)
}

polygonBoxPos2 <- function (xmin, ymin, sizex, sizey,id)
{

  xmax <- xmin + sizex
  ymax <- ymin + sizey

  Sr1 = Polygon(cbind(c(xmin , xmax , xmax , xmin, xmin ),c(ymin, ymin, ymax, ymax, ymin)), hole=TRUE)
  Srs1 = Polygons(list(Sr1), id)

  return(Srs1)
}

您可以在左下角看到它们。

我搜索的所有示例都在 PLOT 操作期间设置了多边形颜色,但我想用多边形存储颜色,如何实现?

【问题讨论】:

  • 这不清楚或无法重现。您的某些函数没有定义,并且不在明显的位置(maptools 和 sp)。也许您只需要创建一个包含多边形和存储颜色的列表对象。你是从哪里得到颜色的?
  • 对不起,我添加了我忘记的 2 个函数。 @Spacedman
  • 颜色来自我用来绘制地图的调色板,在这个例子中我使用了 RColorBrewer 的 brewer.pal(7,"Reds")
  • Righto - 我想您想创建一个SpatialPolygonsDataFrame,并将所需颜色作为数据框的列之一。但是,如果您只想创建彩色矩形,那么空间的东西可能是多余的,您可以使用 R 的 rect 函数来绘制它们。
  • 嗯,将图例保存为 shapefile 有点奇怪,但我猜您认为这是将其导入另一个包的方法...您无法创建“彩色”shapefile,您必须将颜色存储为属性,该属性存储在 .dbf 中,您可以从 SpatialPolygonsDataFrame 创建。

标签: r colors shapefile polygons


【解决方案1】:

从您的空间多边形创建一个SpatialPolygonsDataFrame,并根据您的颜色构建一个数据框:

spdf = SpatialPolygonsDataFrame(Sr=SdP,
                                data=data.frame(
                                  id=1:length(colPalette),
                                  colour=colPalette,
                                  stringsAsFactors=FALSE),
                                match.ID=FALSE)

然后您可以通过以下方式将其绘制到您的地图中:

plot(spdf,col=spdf$colour, add=TRUE)

然后,如果您将其保存为 writeOGR 到 Shapefile,您可能可以使用 colour 属性在您将这些内容加载到的任何包中对其进行遮蔽。我说“可能”是因为您的 GIS 可能不允许从属性中直接指定颜色,在这种情况下,您可能必须在 GIS 中构建一个调色板,这就是为什么我还在其中放置了一个 id 属性也。但无论如何,这超出了你现在的问题范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2017-05-22
    • 2018-04-04
    • 1970-01-01
    • 2014-10-01
    • 2010-10-21
    相关资源
    最近更新 更多