我绘制了等高线图,但我需要做一些改进。这是使用的数据结构:
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,1),我不知道如何手动设置间隔。
有人能告诉我如何绘制地图的特定区域,例如经度从100到160,纬度从-50到-80?我试图替换lon_sst
和lat_sst
,但它有尺寸错误。感谢。
答案 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处生成轮廓线。