【问题标题】:Why is plot of GADM SpatialPolygonsDataFrame not loading in R?为什么 GADM SpatialPolygonsDataFrame 的图未在 R 中加载?
【发布时间】:2018-05-16 23:32:36
【问题描述】:

单线: R 绘制 SpatialPolygonsDataFrame 花费的时间太长,我在网上找到的最佳答案是问题是特定于机器的。

问题:我正在尝试绘制从 GADM 下载的印度 SpatialPolygonsDataFrame(级别 = 1),但没有绘图功能(spplot、plot、tm_shape)在任何给定时间;相反,R 似乎在后台工作,但 5 分钟后仍然没有情节。按下控制台上方出现的停止按钮没有任何作用,最终为了重试其他方法,我必须强制退出应用程序。我的问题与this question 类似,但对该问题的共识是该问题出现在机器特定的情况下,此后没有解决方案。

以下是有关我的机器/R studio 版本的一些信息: R 版本 3.3.2 (2016-10-31) / R Studio 版本 1.0.136 / 操作系统:MacOS Sierra 版本 10.12.6。

文件下载自:GADM,RDS 格式

(1.) 我尝试了不同的绘图机制

setwd("~/Data/Reference/")
india <- readRDS("IND_adm1.rds")

library(sp)
library(tmap)

# Plot method #1 
plot(india)

# Plot method #2
spplot(india, "NAME_1")

# Plot method #3
tm_shape(india) + tm_borders()

(2.) 我尝试从 shapefile 而不是 RDS 重新创建 SpatialPolygonsDataFrame

india <- readOGR(dsn = "~/Data/Reference/" , layer = "IND_adm1")

(3.)我已经更新了机器上的所有包,卸载并重新安装了sp包和tmap包。

(4.) 我尝试了其他国家的文件并遇到了同样的问题。

(5.) 我检查了 SpatialPolygonsDataFrame 的结构,并没有发现任何问题 - 一切似乎都已到位且方式正确。

(6.) 使用 maps 包来绘制他们的数据工作正常。由于某种原因,SpatialPolygonsDataFrame 类没有绘制。我现在也尝试从DIVA-GIS 绘制形状文件。

library(maps)
tx <- map("county", "texas", plot = FALSE, fill = TRUE)
plot(tx) # this plots fine and immediately

要求我基本上需要一张印度的州界地图,我可以将其放入闪亮的交互式 RMarkdown 报告中,并根据因子变量填充州颜色。有一些我可以使用的数据的解决方法吗?

问:我不知道该怎么做或如何进一步诊断。如果有帮助,我将不胜感激,并乐于提供更多信息。我还链接了exact RDS file that I'm using 供您加载并在您的机器上试用。

更新 建议的解决方案都不适用于我的系统,但我认为我遇到的这个挑战是特定于系统的。我最终尝试在 Amazon Web 服务上的远程 Windows 实例上运行相同的代码,并且代码运行良好。所以我不确定这是 Mac 问题还是硬件问题,但我希望此更新对您有所帮助。

【问题讨论】:

  • 我直接从 GADM 下载了 India 文件(级别 1)。文件大小为 2.7MB。使用我 6 岁的 Mac,它不需要五分钟。我使用了两种方法来绘制地图。一个是你所做的 plot() 。另一个是ggplot。在我看来,前者比后者需要更多时间。话虽如此,您可以尝试的一种选择是强化 SP 数据并使用 ggplot 绘制地图。
  • 我下载了 1 级 India spatialpolygondataframe 并根据您的代码绘制它。所有这三个都可以在不到一分钟的时间内在我的笔记本电脑上完成。
  • 感谢您检查机器上的代码。 @jazzurro 我刚才试过了,甚至 ggplot 正在无限期地处理但没有绘图。有什么方法可以查看这些函数调用的后台发生了什么?我该如何进一步诊断?我也尝试过重新下载 RDS 文件。
  • 不确定你能做什么。正如您所说,这可能是特定于机器的问题。如果你有另一台电脑,你可能想用它看看会发生什么。
  • 在 mac 上绘制空间对象似乎存在一些问题。也许这个讨论会有所帮助:community.rstudio.com/t/ggplot2-geom-sf-performance/3251

标签: r geospatial sp rgdal tmap


【解决方案1】:

我在 Mac 上遇到这个问题已经有一段时间了,在寻找解决方案时,在 R Bloggers 上找到了这个问题。该代码简化了 shapefile,使其能够更轻松地绘图:

library("shapefiles")

map = readOGR(dsn = "shp", layer = "shp")

for(i in 1:length(map@polygons)){
  for(j in 1:length(map@polygons[[i]]@Polygons)){
    temp <- as.data.frame(map@polygons[[i]]@Polygons[[j]]@coords)
    names(temp) <- c("x", "y")
    temp2 <- dp(temp, 0.01)
    map@polygons[[i]]@Polygons[[j]]@coords <- as.matrix(cbind(temp2$x, temp2$y))
  }
}

plot(map, col = "black")

(http://www.r-bloggers.com/simplifying-polygon-shapefiles-in-r/)。

然而,虽然这有助于绘图过程,但由于其简化的形式,尝试对新 shapefile 执行 GIS 操作变得很麻烦。

值得从 GADM 以外的网站查找国家/地区 shapefile。例如,我从这个站点使用的所有 shapefile 都可以毫不费力地立即在我的 Mac 上绘制:http://mapeastafrica.com/countries/east-africa-shapefiles/

【讨论】:

  • 请在您的答案中添加代码。不要使用简单的链接。
  • 请您更改否决票?我已经添加了代码并为这个问题提供了一个实用的解决方案。在我发帖之前,唯一的建议是尝试另一台计算机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2012-03-11
  • 1970-01-01
  • 2015-07-13
  • 2013-04-07
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多