R-等高线地图

4

我已经绘制了一个等值线图,但我需要进行一些改进。这是所使用的数据结构:

str(lon_sst)
# num [1:360(1d)] -179.5 -178.5 -177.5 -176.5 -175.5 ...

str(lat_sst)
# num [1:180(1d)] -89.5 -88.5 -87.5 -86.5 -85.5 -84.5 -83.5 -82.5 -81.5 -80.5 ...

dim(cor_Houlgrave_SF_SST_JJA_try)
# [1] 360 180

require(maps)
maps::map(database="world", fill=TRUE, col="light blue")
maps::map.axes()
contour(x=lon_sst, y=lat_sst, z=cor_Houlgrave_SF_SST_JJA_try[c(181:360, 1:180),],
        zlim=c(-1,1), add=TRUE)
par(ask=TRUE)
filled.contour(x = lon_sst, y=lat_sst,
               z=cor_Houlgrave_SF_SST_JJA_try[c(181:360, 1:180),],
               zlim=c(-1,1), color.palette=heat.colors)

图片描述 图片描述

因为大部分相关性接近于0,所以很难看到大的相关性。

  1. 我能不能让它更容易查看,或者我能否更改分辨率以便我可以放大它?目前等高线太过紧密,所以我看不清等高线水平是什么。

  2. 在哪里可以看到增量,我设置了我的范围为(-1,1),我不知道如何手动设置间隔。

  3. 有人能告诉我如何绘制地图的特定区域,比如经度从100度到160度,纬度从-50度到-80度吗?我尝试替换lon_sstlat_sst,但出现了维度错误。谢谢。


(1) 你可以尝试增加字体大小,或使用带有contour()参数的粗体字体,例如labcex=1, vfont=c('sans serif', 'bold');(2) 在contour()中使用levels,例如levels=seq(-1, 1, 0.25);(3) 你可以在map()中使用xlim和ylim。 - jbaums
2个回答

3

回答1和3,这两个请求似乎是相同的,尝试:

maps::map(database="world", fill=TRUE, col="light blue", 
                            ylim=c(-80, -50), xlim=c(100,160) )

针对问题2:您的范围比[-1,1]小得多。这些等高线上的标签是数字,如0.06、-0.02和0.02。contour函数将接受'nlevels'或'levels'参数。一旦您有了一个放大的部分,就可以使用它来调整等高线的z分辨率。


2
lattice包中的contourplot函数也可以生成这种类型的等高线图,并且使等高线和填充颜色都很容易。这可能适合或不适合您的需求,但通过填充等高线间隔,您可以省略文本标签,这在想要具有高分辨率等高线时可能会有点拥挤。

我没有您的海表温度数据,因此以下图使用虚拟数据,但您应该能得到类似的结果。请参见?contourplot?panel.levelplot以获取可能的参数。

对于您所需的小尺度图,叠加世界地图可能不太合适,特别是考虑到感兴趣的区域在海洋中。

library(lattice)
contourplot(cor_Houlgrave_SF_SST_JJA_try, region=TRUE, at=seq(-1, 1, 0.25), 
  labels=FALSE, row.values=lon_sst, column.values=lat_sst,
  xlim=c(100, 160), ylim=c(-80, -50), xlab='longitude', ylab='latitude')

在这里,at参数控制轮廓线计算和绘制的值的位置(因此也控制着颜色渐变中断的数量)。在我的例子中,轮廓线被提供在-0.75,-0.5,-0.25,0,0.25,0.5,0.75和1处(-1为背景)。例如更改为at=seq(-1, 1, 0.5),会在-0.5、0、0.5和1处产生轮廓线。 使用虚拟数据的轮廓图示例

这个函数很好,但问题是如果我使用大范围绘图,我找不到设置地图为填充颜色的参数。在我的原始代码中,我可以设置为“maps::map(database="world", fill=TRUE, col="light blue")”,那么我能否在这里做同样的事情? - Yu Deng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接