1

我在下面整理了一个玩具示例。

我的问题是,我怎样才能添加海岸线(就像你可以从maps包裹到下面的多面图一样?

我可以使用contour()and来做到这一点filled.contour(),但我不确定ggplot2在使用 facet 图层时如何使用 -style 绘图来解决这个问题。当我有一个情节时,我可以毫无问题地绘制海岸。

您可以在此处从 NOAA 下载 netCDF 文件“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) )

上述脚本的输出

非常感谢!

PS 另外,我刚刚注意到颜色图例的顺序是颠倒的。唔...

4

1 回答 1

1

其美妙之ggplot2处在于无需对每个方面执行特定操作。只需添加一个geom_pathwith 作为data包含海岸线的 data.frame 将在所有方面绘制它。有关使用包中的多边形集的示例,请参阅文档coord_map。请注意,当且仅当您的网格数据和多边形/折线数据位于同一投影中时,这将起作用。通过支持开箱即用的坐标变换。或者,您可以在将数据提供给 ggplot2 之前使用包中的执行坐标转换(我倾向于这样做)。geom_pathmapscoord_map ggplot2spTransformrgdal

于 2012-04-18T07:40:48.737 回答