![](/img/trans.png)
[英]How to clip a polygon shapefile by another polygon shapefile in R?
[英]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@polygons
和map@data
引用。
上面的代碼讀取shapefile並將坐標轉換為epsg:4839 。 然后我們將多邊形id(存儲在rownames中)添加到map@data
的其他信息,創建map.data
。 然后我們使用ggplot
的fortify(...)
函數將多邊形轉換為適合繪圖的數據map.df
( map.df
)。 此數據map.data
的列id
與map.data
的id
列map.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.