2012-02-07 103 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