使用R中的spplot在图形上绘制多个shp文件

lok*_*art 10 gis plot r ggplot2

我有3个shp文件,分别代表房子,房间和房子的床.我需要使用R在图表上绘制它们,以便它们彼此重叠.我知道在plot功能上,我可以使用line在现有情节的顶部绘制新线,是否有相应的东西spplot?谢谢.

Jos*_*ien 18

这是一种方法,使用layer()来自latticeExtra包的漂亮函数:

# (1) Load required libraries
library(sp)
library(rgeos)        # For its readWKT() function
library(latticeExtra) # For layer()

# (2) Prepare some example data
sp1 = readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))")
sp2 = readWKT("POLYGON((0 1,0.5 1.5,1 1,0 1))")
sp3 = readWKT("POLYGON((0.5 0,0.5 0.5,0.75 0.5,0.75 0, 0.5 0))")

# spplot provides "Plot methods for spatial data with attributes",
# so at least the first object plotted needs a (dummy) data.frame attached to it.
spdf1 <- SpatialPolygonsDataFrame(sp1, data=data.frame(1), match.ID=1)

# (3) Plot several layers in a single panel
spplot(spdf1, xlim=c(-0.5, 2), ylim=c(-0.5, 2), 
       col.regions="grey90", colorkey=FALSE) +
layer(sp.polygons(sp2, fill="saddlebrown")) +
layer(sp.polygons(sp3, fill="yellow"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者,您可以通过实现相同的结果spplot()sp.layout=说法.(指定first=FALSE确保'屋顶'和'门'将在作为spplot()第一个参数给出的灰色方块之上/之上绘制.)

spplot(spdf1, xlim=c(-0.5, 2), ylim=c(-0.5, 2), 
       col.regions="grey90", colorkey=FALSE,
       sp.layout = list(list(sp2, fill="saddlebrown", first=FALSE),
                        list(sp3, fill="yellow", first=FALSE)))
Run Code Online (Sandbox Code Playgroud)


Pau*_*tra 2

您可以使用sp.layout中的参数spplot。或者,您可以使用 ggplot2。一些示例代码(未经测试):

library(ggplot2)
shp1_data.frame = fortify(shp1)
shp1_data.frame$id = "shp1"
shp2_data.frame = fortify(shp2)
shp2_data.frame$id = "shp2"
shp = rbind(shp1_data.frame, shp2_data.frame)

ggplot(aes(x = x, y = y, group = group, col = id), data = shp) + geom_path()
Run Code Online (Sandbox Code Playgroud)

在 中ggplot2,数据中的列链接到图中的图形比例。在本例中x, 是 x 坐标,y是 y 坐标,group是 data.frame shp 中的一列,指定点属于哪个多边形,col是多边形的颜色。我使用的几何体是geom_path,它根据多边形输入 data.frame 绘制一系列线条。另一种方法是使用geom_poly,它也支持填充多边形。