Mic*_*nry 7 r geospatial shapefile
我有一个显示澳大利亚偏远地区的形状文件,来自澳大利亚统计局:
http://www.abs.gov.au/AUSSTATS/abs@.nsf/DetailsPage/1270.0.55.005July%202011?OpenDocument
在同一个URL是PDF"ASGS Remoteness Structure Edition 2011 PDF Maps" - 我试图从这个PDF文档重现第一张地图.
我已经在shapefile中读到并向data插槽添加了颜色信息:
ra <- readShapeSpatial("RA_2011_AUST", delete_null_obj = TRUE)
ra@data$COLOUR <- "#FFFFFF"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 0] <- "#006837"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 1] <- "#31A354"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 2] <- "#78C679"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 3] <- "#C2E699"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 4] <- "#FFFFCC"
Run Code Online (Sandbox Code Playgroud)
我唯一要做的就是绘制地图!这是我被困的地方......
ra@polygons是一个包含35个多边形的列表,每个多边形都有一个槽ID,它是数据帧的索引ra@data.所以我要做的就是告诉我plot()找到颜色ra@data$COLOUR[ID].嗯,不太好.35个多边形("多边形"类)中的每一个都有自己的多边形列表("Polygon"类); 总共有6902个多边形!!!
我的理解plot()是,我必须以与绘制多边形相同的顺序传递颜色矢量.因此,我相信我必须创建一个长度为6902的向量,每个元素保存相关多边形的颜色值.我到目前为止怎么样?
如果按顺序绘制多边形,那将很容易,但它们不是.35个多边形中的每一个都有一个plotOrder整数向量的槽,因此颜色向量可能必须按照这些向量中的每个向量的顺序排序.
在这一点上,这一切似乎有点过于复杂.我完全偏离了这里吗?
谢谢你的建议!
pla*_*pus 12
你已经完成了所有的工作!
plot(ra, col=ra@data$COLOUR)
Run Code Online (Sandbox Code Playgroud)
甚至,正如@Spacedman建议的那样:
plot(ra, col=ra$COLOUR)
Run Code Online (Sandbox Code Playgroud)
就是这样!

如果你想摆脱多边形边界:
plot(ra, col=ra$COLOUR, border=NA)
Run Code Online (Sandbox Code Playgroud)

编辑:尝试解释此行为:
根据?SpatialPointsDataFrame:
具有默认ID匹配的SpatialPolygonsDataFrame将根据多边形ID槽检查数据框行名称.然后它们必须彼此一致,并且是唯一的(没有多边形对象可以共享ID); 如果需要匹配多边形ID,数据框行将被重新排序.
这意味着多边形根据其ID排序,因此按照插槽中数据帧的行的顺序排列@data.
现在,如果你看一下函数plot.SpatialPolygons(使用getAnywhere(plot.SpatialPolygons)),那么在某些时候会有这些行:
...
polys <- slot(x, "polygons")
pO <- slot(x, "plotOrder")
if (!is.null(density)) {
if (missing(col))
col <- par("fg")
if (length(col) != n)
col <- rep(col, n, n)
if (length(density) != n)
density <- rep(density, n, n)
if (length(angle) != n)
angle <- rep(angle, n, n)
for (j in pO) .polygonRingHoles(polys[[j]], border = border[j],
xpd = xpd, density = density[j], angle = angle[j],
col = col[j], pbg = pbg, lty = lty, ...)
}
...
Run Code Online (Sandbox Code Playgroud)
输入的向量col具有与polygons时隙相同的顺序,因此具有ID.plotOrder用于以相同的方式索引所有这些.
| 归档时间: |
|
| 查看次数: |
9535 次 |
| 最近记录: |