填充多边形没有工作

问题描述:

下面的代码可以很好地用于绘制多边形填充多边形没有工作

SP <- SpatialPolygons(spd) 
centroids <- coordinates(SP) 
x <- centroids[,1] 
y <- centroids[,2] 
SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, row.names = row.names(SP))) 
ggplot(data = SP1, aes(x = long, y = lat, group = group)) + geom_path() 

相反,如果我改变代码的最后两行基于某些值向量它不工作,以填补这些多边形:

数据源:https://www.google.com/maps/d/viewer?mid=1mf9TQY3bocarO4SaIXAtco_C1LE&hl=en_US

penetration <- runif(n = length(SP), min = 1, max = 10) 
SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, value = penetration, row.names = row.names(SP))) 
ggplot(data = SP1, aes(x = long, y = lat, group = group)) + geom_polygon(aes(fill=SP1$value)) 

SPD与从下面的链接数据来创建

我再提取坐标从KML文件......这是遂成多边形的列表,以便我可以使用一些绘图功能绘制...

tkml <- getKMLcoordinates(kmlfile="Pune all Electoral Wards.kml", ignoreAltitude=T) 
len <-length(tkml) 

del <- NA 
for(i in 1:len) 
{ 
    if(length(tkml[[i]]) == 2) 
    del <- c(del, i) 
} 
del <- del[-1] 
tkmlCleaned <- tkml[!tkml %in% tkml[del]] 
size <- length(tkmlCleaned) 
sr <- vector(mode = "list", length = size) 
srs <- vector(mode = "list", length = size) 
spd <- list() 
for(j in 1:length(sr)) 
{ 

    sr[[j]] <- Polygon(tkmlCleaned[[j]]) 
    srs[[j]] <- Polygons(list(sr[[j]]), j) 
    spd <- c(srs[[j]], spd) 
} 
+0

什么是'spd'?你可以添加一个数据集来使其具有可重现性吗? – steveb

+0

因为我不习惯发布堆栈溢出,请不要介意格式化错误 – Aditya

+0

最好使用'dput'提供数据。所以为了得到'spd',你可以做下面的'dput(spd)' – steveb

我发现我的方式合并了多边形使用Polygon数据填充数据与ggplot的数据格式不兼容。所以,下面的代码没有工作

SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, value = penetration, row.names = row.names(SP))) 

首先,我们需要从GGPLOT2库使用Fortify的命令

SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, row.names = row.names(SP))) 
abc <- fortify(SP1) 

SP1 data snapabc data snap

音符数据如何被当设防命令的应用堆叠成LAT ,long,id,group等栏目。

id列来自Polygons命令,其中每个Polygon被分配一个id,如下面的代码所示。在多边形功能的第二个参数是用于ID

for(j in 1:length(sr)) 
{ 

    sr[[j]] <- Polygon(tkmlCleaned[[j]]) 
    srs[[j]] <- Polygons(list(sr[[j]]), j) 
    spd <- c(srs[[j]], spd) 
} 

要在某种程度上是由ggplot可读我所使用的函数INNER_JOIN从dplyr库加入数据。 请注意,dplyr软件包不适用于R 3.1.0,我已更新至最新版本。

cde <- inner_join(abc, wardDensity1, by = "id") 

渗透通过合并映射针对ID当我们使用INNER_JOIN功能,结果是ggplot可读

wardDensity包含病房

的ID(在这种情况下是选举病区名称)和人口
baseHeatMap <- ggplot(data = cde, aes(long , lat, group = group, fill = penetration)) + geom_polygon(color = "black")