2012-04-18 88 views
1

我在下面放置了一個玩具示例。當用ggplot2在R中繪製分面陣列時添加海岸線

我的問題是,我怎麼能添加海岸線(就像你可以從maps包到下面?

的方位圖,我可以contour()filled.contour()做到這一點,但我不知道如何使用面層時去這與ggplot2風格的畫圖。我沒有問題,繪圖海岸時,我有一個情節。

您也可以下載的netCDF從NOAA here文件「sst.mon.anom.nc」( 〜10mb)

library(ncdf4) 
library(ggplot2) 
library(reshape) 

# The data is 5x5 degree reconstructed sea-surface temperature anomalies. 
# Exciting stuff. 
sst <- ncvar_get(nc = nc_open("sst.mon.anom.nc"), 
       varid = "sst", 
       start = c(1, 1, 1), 
       count = c(-1, -1, -1)) 

# Drawing out four layers from the sst array. 
d1 <- melt(sst[, , 1]) 
d1$drought <- rep("d1", dim(d1)[1]) 
d3 <- melt(sst[, , 3]) 
d3$drought <- rep("d3", dim(d3)[1]) 
d5 <- melt(sst[, , 5]) 
d5$drought <- rep("d5", dim(d5)[1]) 
d6 <- melt(sst[, , 6]) 
d6$drought <- rep("d6", dim(d6)[1]) 

# Combining the layers into a single data.frame: 
d <- rbind(d1, d3, d5, d6) 
names(d) <- c("lon", "lat", "ERSST", "layer") 

p <- ggplot(data = d, aes(x = lon, y = lat, fill = ERSST)) 
print(p + geom_tile() + 
     scale_fill_gradient2(high = "red", low = "blue") + 
     facet_wrap(~ layer)) 

Output from the above script

非常感謝!

P.S.另外,我只注意到顏色圖例排序是顛倒的。嗯......

+0

安裝ncdf4庫有沒有'catch'?我嘗試安裝時收到以下消息:「錯誤:程序包'ncdf4'的配置失敗'」和'程序包安裝'ncdf4'具有非零退出狀態「。 – Jubbles 2012-04-18 03:05:22

+0

這可能是一個依賴性問題。我相信它將netcdf庫> 4.1作爲系統要求。 http://cran.r-project.org/web/packages/ncdf4/index.html – brews 2012-04-18 06:04:38

+0

@brews只需使用'save'保存數據,這應該使其他人可以使用'load'將其加載到他們的工作區。 – 2012-04-18 07:35:54

回答

1

ggplot2的美是,沒有必要執行每個方面的具體操作。剛剛添加了一個geom_path作爲data包含海岸線的data.frame將在所有方面上繪製它。有關使用包中的多邊形組的示例,請參閱the documentation of coord_map。請注意,當且僅當您的網格數據和多邊形/折線數據處於相同的投影中時,纔會起作用。通過coord_mapggplot2支持座標轉換開箱即用。或者,您可以使用rgdal包中的spTransform在將數據提供給ggplot2之前執行座標轉換(我傾向於這樣做)。

+0

是的,這就是我在ggplot2中繪圖時沒有刻面的情況。但是當面對時,海岸data.frame不會需要我正在面對的任何變量嗎? – brews 2012-04-18 22:13:38

+0

不,如果您正在切面的變量不存在於地圖'data.frame'中,它將在所有構面上繪製相同的地圖。你可以定義你所面對的變量,允許你在不同的方面繪製不同的地圖。但是如果你想在任何地方繪製相同的地圖,這不是必需的。 – 2012-04-19 07:37:41