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_sstand lat_sst,但它有尺寸错误。谢谢。

4

2 回答 2

3

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

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

要解决 2:您的范围比 [-1,1] 小得多。这些等高线上的标签是 .06、-.02 和 .02 等数字。该contour函数将接受“nlevels”或“levels”参数。一旦你有一个放大的部分,你可以用它来调整轮廓的 z 分辨率。

于 2012-02-07T13:15:08.040 回答
2

contourplotlattice包中还可以生成这些类型的等高线图,并且可以轻松地绘制等高线和填充颜色。这可能会也可能不会满足您的需求,但通过填充轮廓间隔,您可以取消文本标签,如果您想要高分辨率轮廓,文本标签可能会变得有点拥挤。

我没有你的海面温度数据,所以下图使用了虚拟数据,但你应该得到类似的数据。有关可能的论点,请参见?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 处生成等高线。

使用带有虚拟数据的等高线图的示例

于 2012-02-07T22:47:53.597 回答