gpt4 book ai didi

r - 在带有 "maps"包的 R 中使用 xlim/ylim 的投影会产生更大的 map

转载 作者:行者123 更新时间:2023-12-04 09:07:03 25 4
gpt4 key购买 nike

我将 R 与 maps/mapproject/maptools 包一起使用来绘制一些 map ,并注意到一种对我来说似乎违反直觉的行为,实际上限制了我的能力。

绘制欧洲 map (限制取自 ETRS89 / ETRS-LCC ,因此没有冰岛,也在东部裁剪)不指定任何投影:

library(maps)
map("world",xlim=c(-10.67,34.5),ylim=c(31.55,71.05), interior = T)

Europe map without projection specified

结果如预期,正在使用限制并且生成的 map 遵循它们。

map 默认使用的投影是,根据帮助:
The default is to use a rectangular projection with the aspect ratio
chosen so that longitude and latitude scales are equivalent at the
center of the picture.

这对我的需求来说不是一个好的投影,我将使用 LCC 投影和上面的 spacereference.org 链接中所示的平行线:
library(maps)
map("world",xlim=c(-10.67,34.5),ylim=c(31.55,71.05), interior = T, projection="lambert", parameters = c(45,65))
box()

Europe map with projection specified

结果出人意料,因为它包含了更大的区域(向北走很远,包括俄罗斯),基本上使 map 无法使用。

奇怪的是,在使用网格时,会清楚地考虑到原始限制:
library(maps)
library(mapproj)
map("world",xlim=c(-10.67,34.5),ylim=c(31.55,71.05), interior = T, projection="lambert", parameters = c(45,65))
map.grid(cex=0.1 , col="grey30")
box()

Europe map with LCC projection and grid

我想要的(以及我假设将是上述代码的结果)是一个矩形裁剪,其中包括我指定的限制(由于使用的投影进行了调整,因此具有比上面的矩形更大的面积预期) .此外, map 和边界周围有一个空白区域,每当使用 map() 进行投影时就会出现该空白区域。

问题是:有没有办法在使用 map/mapproj/maptools 时得到这个结果?我试图人为地改变 xlim/ylim 没有很好的结果,因为它似乎在很大的间隔内起作用(即改变它们不会产生效果,直到欧洲的一半突然随着下一个减量消失)。

最佳答案

"map()"的基本行为是提取 xlim 和 ylim 中的所有行,但也会从数据库中提取部分域中的行。当没有投影时,xlim 和 ylim 也被用作绘图的限制,但是当数据被投影时,这显然不起作用。 (您不能简单地投影 xlim 和 ylim,因为这不是矩形域)。 map 代码不够复杂,无法找到一个好的解决方案,只是将绘图限制设置为数据范围(包括任何不需要的线条)。作为“ map ”的(最近)维护者,这实际上是我可能会尝试解决的问题。不幸的是,mapproj 不包括逆投影,这是按照您的预期正确执行所必需的。在底部限制 map (而不是在顶部扩展)要容易得多。

作为解决方法,您还可以尝试以下操作(使用 map 的输出值):

mymap <- map("world",xlim=c(-10.6600,31.5500), ylim=c(34.5000,71.0500),  projection="lambert", parameters=c(10.44,52.775), plot=FALSE)

现在您可以查看 mymap$x 和 mymap$y 的范围:
range(mymap$x, na.rm=TRUE)

或只是 plot(mymap)查看范围并决定您需要哪个间隔。

然后,最后,您可以绘制具有您想要的确切限制的 map ,例如
plot(mymap, type="l", asp=1,xaxt="n",yaxt="n",xlab="",ylab="", xlim=c(-0.2,0.15), ylim=c(-0.75,-0.35))

不理想,但希望足够好。 “asp=1”是为了保持 map 上的纵横比正确,即使你调整了绘图窗口的大小。

关于r - 在带有 "maps"包的 R 中使用 xlim/ylim 的投影会产生更大的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com