在R中绘制地图,没有边界

时间:2015-09-23 16:58:18

标签: r dictionary

我正在使用

绘制欧洲地图
  library(rworldmap)
  newmap <- getMap(resolution = "high")
  plot(newmap, xlim = c(-10, 30), ylim = c(25, 65), asp = 1)

是否有可能不绘制国家之间的界限,而只绘制海洋与陆地之间的界限?

我可以用

实现这一目标
map('world', xlim = c(-10, 30), ylim = c(25, 65), asp = 1, interior=FALSE)

但我不太喜欢这个决议。

1 个答案:

答案 0 :(得分:0)

你可以获得非常精细的分辨率只是从自然地球着陆边界(你也可以获得较低分辨率的分辨率)。您支付的价格是处理/绘图的时间(R对复杂/多边形来说不是很快)。

以下内容:

  • 抓住&amp;进口最佳res天然地球陆地边界
  • 将其剪辑到您指定的边界框
  • 简化了边框(这是您调整分辨率/时间权衡的地方)
  • 剪辑简化边框
  • 绘制2x2比较网格

library(sp)
library(rgdal)
library(rgeos)
library(raster)

URL <- "http://naciscdn.org/naturalearth/10m/physical/ne_10m_land.zip"
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil)

shp <- grep("shp$", unzip(fil), value=TRUE)

world <- readOGR(shp, ogrListLayers(shp)[1], stringsAsFactors=FALSE)
world_clip <- gIntersection(as(extent(-10, 30, 25, 65), "SpatialPolygons"),
                            world, byid=TRUE)

# tweak 0.05 up/down as needed
world_simpl <- gSimplify(world, 0.05)
world_simpl_clip <- gIntersection(as(extent(-10, 30, 25, 65), "SpatialPolygons"),
                            world_simpl, byid=TRUE)

par(mfrow=c(2,2), mar=c(0,0,0,0))
plot(world, xlim = c(-10, 30), ylim = c(25, 65), asp = 1)
plot(world_clip, asp = 1)
plot(world_simpl, xlim = c(-10, 30), ylim = c(25, 65), asp = 1)
plot(world_simpl_clip, asp = 1)
par(mfrow=c(1,1))

enter image description here

更细的线条不会在较小的显示/打印尺寸上移除(IMO)丑陋的海岸线,但您可以调整简化组件以实现您自己的个人审美和放大。时间平衡。