如何为地理地图缩小地块和边界之间的空间? [英] How to reduce the space between the plot and the border for geographic maps?

查看:21
本文介绍了如何为地理地图缩小地块和边界之间的空间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用地图图库绘制美国东北部的水深地图。下面的代码加载了正确的范围,但是当我绘制地图时,在地图的顶部/底部或左侧/右侧的边框和地图之间有空白。在输出打印时也会发生这种情况。如果我拖动绘图查看器屏幕大小,绘图将会调整,并且我可以删除几乎所有的空白空间,但我将循环运行此脚本,因此以这种方式解决此问题是不现实的。由于循环的原因,我也不能将任何维度硬编码到绘图中,因为它会随着每个新范围的变化而变化。如何设置地块边界以匹配水深测量范围?

library(marmap)
library(maps)

atl<- getNOAA.bathy(-80.93645,-41.61417,30.2 ,60.905 ,resolution=4)
blues <- colorRampPalette(c("darkblue", "cyan"))
greys <- colorRampPalette(c(grey(0.4),grey(0.99)))

plot(atl, image = TRUE, land = TRUE, n=0,
     bpal = list(c(0, max(atl), greys(100)),
                 c(min(atl), 0, blues(100))))
map(database= "state", col="black", fill=FALSE, add=TRUE)
text(x=state.center$x, y=state.center$y, state.abb, cex=0.5)

推荐答案

此行为由plot.bathy()asp参数引起。默认情况下,它固定为asp = 1以确保两个轴上的比例相同(一度经度等于一度纬度)。此默认设置的一个不受欢迎的后果是,根据您的水深地图和绘图设备的尺寸,白色条带会出现在图形的左侧/右侧或顶部/底部。

所以我想您有两个选择:

  1. 如果您不介意视角稍有扭曲,您可以在调用plot.bathy()
  2. 时设置asp = NA
  3. 如果您想要具有正确的纵横比,但需要使用绘图区域的默认大小,则必须下载覆盖活动设备的整个绘图区域的测深区域。例如,您可以调用plot.bathy()一次来创建"默认"绘图,然后使用par("usr")来确定填充整个绘图区域所需的水深测量的界限。然后,您将下载具有经度和纬度的适当范围的第二个水深测量。这可能不是我们所希望的。

以下是第二个选项的代码:

atl <- getNOAA.bathy(-80.93645, -41.61417, 30.2, 60.905, resolution = 4)
blues <- colorRampPalette(c("darkblue", "cyan"))
greys <- colorRampPalette(c(grey(0.4), grey(0.99)))

plot(atl, image = TRUE, land = TRUE, n = 0,
     bpal = list(c(0, max(atl), greys(100)),
                 c(min(atl), 0, blues(100))))

coord <- par("usr")
atl2 <- getNOAA.bathy(coord[1], coord[2], coord[3], coord[4], res = 4)
plot(atl2, image = TRUE, land = TRUE, lwd = 0.2,
     bpal = list(c(0, max(atl2), greys(100)),
                 c(min(atl2), 0, blues(100))))
map(database = "state", col = "black", fill = FALSE, add = TRUE)
text(x = state.center$x, y = state.center$y, state.abb, cex = 0.5)

我想罗曼·卢šTrik提出的解决方案也有效,但它有一个不便之处,即在绘图的两侧都可以看到白色条纹。

顺便说一句,如果您有很多测深区域要绘制,您可能应该考虑使用keep = TRUE参数getNOAA.bathy(),以避免每次需要重新执行代码时都查询NOAA服务器(加载本地数据比加载远程数据快得多)。您还可以一次性下载GLOBAL 4Go ETOPO1,并使用subset.bathy()设置每个地块所需的水深测量的子集。

这篇关于如何为地理地图缩小地块和边界之间的空间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆