2012-02-07 106 views
3

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

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

+0

(1)可以尝试提高字体大小,或使用黑体字用'轮廓()论点,例如'labcex = 1,vfont = c('sans serif','bold')'; (2)在'contour()'中使用'levels',例如'levels = seq(-1,1,0.25)'; (3)你可以在'map()'中使用xlim和ylim。 – jbaums 2012-02-07 09:53:12

回答

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分辨率。

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

example using contourplot with dummy data

+0

这个功能非常好,但是如果我用大范围进行绘制,那么我无法找到将该土地设置为彩色填充的参数。在我原来的版本中,我可以将它设置为“maps :: map(database =”world“,fill = TRUE,col =”light blue“)”,我可以在这里做同样的事情吗? – 2012-02-08 01:31:26