我的目标是在 R 中创建一个 3D 可视化。我有一份柏林市内城区(Ortsteile)的 shapefile 文件,并想要将人口密度(每平方公里的居民数)作为 z 值进行突出显示。我已经将 shapefile 文件导入 R 中,并按以下方式对密度值("Einwohnerd")进行了着色:
library(rgdal)
library(sp)
berlin=readOGR(dsn="C...etc.", layer="Ortsteile")
berlin@data
col <- rainbow(length(levels(berlin@data$Name)))
spplot(berlin, "Einwohnerd", col.regions=col, main="Ortsteil Berlins", sub="Datensatz der Stadt Berlin", lwd=.8, col="black")
如何将特定多边形(城市区域)与Z值(人口/平方公里)相关联,以及如何突出显示此Z值?
希望有人能给出答案! 最好的问候 SB
感谢您的答案,但我仍在寻找最佳方法使用密度作为Z值,以便我可以创建3D模型。 我发现无法使用形状的多边形,但可以光栅化多边形并使用矩阵进行不同的透视和旋转。
这是代码,但最终的3D可视化效果不够清晰和好。也许更好的方法是以另一种方式计算Z值,使第一组值不会如此高,或者使用多边形的中心,然后在z方向上绘制柱:
library(rgdal)
library(sp)
setwd("C:\\...")
berlin=readOGR(dsn="C:\\...\\Ortsteile", layer="Ortsteile")
col <- rainbow(length(levels(berlin@data$Name)))
spplot(berlin, "Einwohnerd", col.regions=col, main="Ortsteil Berlins",
sub="Datensatz der Stadt Berlin", lwd=.8, col="black")
library(raster)
raster <- raster(nrows=100, ncols=200, extent(berlin))
test <- rasterize(berlin, raster, field="Einwohnerd")
persp(test, theta = 40, phi = 40, col = "gold", border = NA, shade = 0.5)
for(i in seq(0,90,10)){
persp(test, theta = 40, phi = i, col = "gold", border = NA, shade = 0.5)
}
library(rgl)
library(colorRamps)
mat <- matrix(test[], nrow=test@nrows, byrow=TRUE)
image(mat)
persp3d(z = mat, clab = "m")
persp3d(z = mat, col = rainbow(10),border = "black")
persp3d(z = mat, facets = FALSE, curtain = TRUE)