Z – R中多边形(shapefile)的值

我的目标是在R中创建一个3D可视化.我在柏林有一个城区的形状文件(Ortsteile),并希望将值(居民/km²)作为z值突出显示.我已将shapefile实现为R并为desnity(“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值(居民/km²),如何突出显示该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)

最佳答案 这是你的想法吗?

library(ggplot2)
library(rgdal)           # for readOGR(...) and spTransform(...)
library(RColorBrewer)    # for brewer.pal(...)

setwd("<directory with shapefile>")
map <- readOGR(dsn=".",layer="Ortsteile")
map <- spTransform(map,CRS=CRS("+init=epsg:4839"))
map.data <- data.frame(id=rownames(map@data), map@data)
map.df   <- fortify(map)
map.df   <- merge(map.df,map.data,by="id")
ggplot(map.df, aes(x=long, y=lat, group=group))+
  geom_polygon(aes(fill=Einwohnerd))+
  geom_path(colour="grey")+
  scale_fill_gradientn(colours=rev(brewer.pal(10,"Spectral")))+
  theme(axis.text=element_blank())+
  labs(title="Berlin Ortsteile", x="", y="")+
  coord_fixed()

说明

这是一个很好的问题,因为它提供了一个使用R中的ggplot的非常基本的等值线图的示例.

可以使用readOGR(…)将Shapefile读入R,从而生成SpatialDataFrame对象.后者基本上有两个部分:包含多边形边界坐标的多边形部分,以及包含shapefile中属性表的信息的数据部分.这些可以分别作为map @polygons和map @ data引用.

上面的代码读取shapefile并将坐标转换为epsg:4839.然后我们将多边形id(存储在rownames中)添加到map @ data中的其他信息,创建map.data.然后我们使用ggplot中的fortify(…)函数将多边形转换为适合绘图的数据框(map.df).此数据框的列ID与map.data中的id列对应.然后我们基于id列将属性信息(map.data)合并到map.df中.

ggplot调用创建地图图层并渲染地图,如下所示:

ggplot:       set the default dataset to map.df; identify x- and y-axis columns
geom_polygon: identify column for fill (color of polygon)
geom_path:    polygon boundaries
theme:        turn off axis text
labs:         title, turn off x- and y-axis labels
coord_fixed:  ensures that the map is not distorted

关于scale_fill_gradientn(…)的注释:此函数通过插入colors =参数中提供的调色板为填充值指定颜色.这里我们使用了www.colorbrewer.org的Spectral调色板.不幸的是,这个调色板有着名的颜色(蓝色 – 红色),因此我们使用rev(…)来反转颜色顺序(高=红色,低=蓝色).如果您更喜欢matlab中常见的更高饱和度的颜色,请使用library(colorRamps)并将对scale_fill_gradientn(…)的调用替换为:

  scale_fill_gradientn(colours=matlab.like(10))+
点赞