簡體   English   中英

Z - R中多邊形(shapefile)的值

[英]Z - Values for polygon (shapefile) in R

我的目標是在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的非常基本的等值線圖的ggplot

可以使用readOGR(...)將Shapefile讀入R,從而生成SpatialDataFrame對象。 后者基本上有兩個部分:包含多邊形邊界坐標的polygons部分,以及包含shapefile中屬性表的信息的data部分。 這些可以分別作為map@polygonsmap@data引用。

上面的代碼讀取shapefile並將坐標轉換為epsg:4839 然后我們將多邊形id(存儲在rownames中)添加到map@data的其他信息,創建map.data 然后我們使用ggplotfortify(...)函數將多邊形轉換為適合繪圖的數據map.dfmap.df )。 此數據map.data的列idmap.dataidmap.data 然后我們基於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(...)注釋:此函數通過插入colours=參數中提供的調色板為填充值指定顏色。 在這里,我們使用www.colorbrewer.org的Spectral調色板。 不幸的是,這個調色板有着名的顏色(藍色 - 紅色),所以我們使用rev(...)來反轉顏色順序(高=紅色,低=藍色)。 如果您更喜歡matlab中常見的更高飽和度的顏色,請使用library(colorRamps)並將對scale_fill_gradientn(...)的調用替換為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM