R - 轮廓图

时间:2012-02-07 07:05:03

标签: arrays r dictionary contour

我绘制了等高线图,但我需要做一些改进。这是使用的数据结构:

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)

enter image description here enter image description here

由于大多数相关性接近于0,因此很难看到大的相关性。

  1. 我可以让它更容易看到,还是可以更改分辨率,以便我可以放大?目前轮廓间距太紧,所以我看不出轮廓水平是什么。

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

  3. 有人能告诉我如何绘制地图的特定区域,例如经度从100到160,纬度从-50到-80?我试图替换lon_sstlat_sst,但它有尺寸错误。感谢。

2 个答案:

答案 0 :(得分: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分辨率。

答案 1 :(得分:2)

contourplot包中的

lattice也可以生成这些类型的等高线图,并使轮廓线和填充颜色变得容易。这可能会或可能不适合您的需求,但通过填充轮廓间隔,您可以取消文本标签,如果您想要高分辨率轮廓,可能会有点拥挤。

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

example using contourplot with dummy data