r - 如何用R语言将全局 map 叠加到填充轮廓上

标签 r graphics contour

我想在填充轮廓中绘制一些经纬度数据,然后在顶部覆盖地球 map 。我正在尝试这样的事情:

filled.contour(lons, lats, glb.data,
plot.axes={axis(1);axis(2);map(projection='rectangular',parameters=0,add=T)}
)

等值线绘制得很好, map 也显示出来了,但只是在等值线图的一小块区域中显示为一个非常小的黑色矩形。当然,我希望 map 延伸到填充等值线图的整个区域。

我也尝试过类似的方法:

filled.contour(lons, lats, glb.data,
plot.axes={axis(1);axis(2);map(projection='rectangular',x=lons,y=lats,parameters=0,add=T)}
)

在这种情况下, map 根本不绘制,并且我收到一条错误消息“没有可绘制的内容:所有区域超出范围” 人们显然总是成功地做到这一点,但我却无法让它发挥作用。谁能告诉我我做错了什么?顺便说一句,我不想​​使用lattice包。它不适用于我的团队正在做的其他事情。谢谢。

最佳答案

好的。对于任何关心的人,我都有答案。也许不是最好的答案,但只是一个答案。问题是有两种常见的方式来表示纬度和经度:度数和弧度。还有第三种常见的经度表示方式:本地时间,即广义为 float 的时区时间。然后,为了让生活更有趣,经度通常指定为 -180(东)到 180(西)或 0 到 360。

现在,当您尝试显示 map 时,R 会根据 map 包的内部结构自动选择用于显示的经纬度单位。如果您正在一组单元中工作,但 R 想要在另一组中显示 map ,则会遇到麻烦。另一个问题是不同的 map 投影需要用不同的单位显示。正如我发现的,“默认”投影喜欢度数;它希望显示在经度限制为 -180 到 180 、纬度限制为 -90 到 90 的绘图矩形中。但是,“矩形”投影虽然看起来非常像默认投影,但喜欢弧度;它希望显示在一个矩形中,该矩形拉伸(stretch)-pi到pi(经度)和-pi/2到pi/2(纬度)。 map 项目中根本没有讨论这些绘图限制。

因此,您需要执行以下操作: 1) 确定您想要的 map 投影,然后确定绘制它的限制:

> map(projection=foo,parameters=foo)
> par('usr')   # will return vector of plot limits

2)知道你自己的数据表示的单位。如果你刚刚抓取了别人的数据集,你可能会对此感到惊讶。

3)当你绘制...

filled.contour(lons, lats, glb.data)

如果您的“经度”和“纬度”的单位与您的投影预期的限制一致,那么您应该没问题,并且您应该能够简单地添加 map

filled.contour(lons, lats, glb.data,
plot.axes={axis(1,...);axis(2,...);map(projection=foo,parameters=foo,add=T)})

但是,如果您的经度和纬度不是投影所需要的,那么您还有更多工作要做。您必须通过调用 par() 重新定义绘图的限制。这对我有用:

filled.contour(lons, lats, glb.data,
plot.axes={axis(1,...);axis(2,...);par(usr=c(-180,180,-90,90));
map(add=T)})

当我需要绘图左端的本初子午线(即,x 轴上各处的经度从 0 增加到 360)时,我对 par() 和 map() 进行了两次调用:

filled.contour(lons, lats, glb.data,
plot.axes={axis(1,...);axis(2,...);
par(usr=c(0,360,-90,90));map(add=T);  #eastern hemisphere
par(usr=c(-360,0,-90,90));map(add=T)}   #western
)

还有一些其他的皱纹。 (例如,“矩形”投影没有精确地 -pi 和 +pi 的限制。)但是如果我到目前为止所说的有道理,您将能够处理它们。

关于r - 如何用R语言将全局 map 叠加到填充轮廓上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891908/

相关文章:

python - (x, y, z) 列表值的轮廓

r - 如何在不合并的情况下匹配多列?

R Language : Error in read. table(file.path(data.dir, file_name1)):输入中没有可用的行

r - 使用 R 在现有 tcltk 窗口中显示进度条

c++ - 流氓线被绘制到窗口

r - 在 'par(mfrow ='无法实现的布局中布置图

java - 如何删除 Graphics 对象?

opencv - 如何在我的 camshift 跟踪算法中找到椭圆的质心?

python - 在 opencv 中检测嵌套形状

r - 再次 : Setting the environment within a function