如何从netcdf文件可视化地图?

时间:2012-09-05 15:42:47

标签: r dictionary ggplot2 netcdf

我有一个netcdf文件,我想直观地显示土壤深度图

   [1] "file C:\\Users\\SoilDepth-gswp.nc has 3 dimensions:"
     [1] "x   Size: 360"
     [1] "y   Size: 150"
     [1] "land   Size: 15238"
     [1] "------------------------"
     [1] "file C:\\SoilDepth-gswp.nc has 3 variables:"
     [1] "float nav_lon[x,y]  Longname:Longitude Missval:1e+30"
     [1] "float nav_lat[x,y]  Longname:Latitude Missval:1e+30"
     [1] "float SoilDepth[land]  Longname:Soil depth Missval:1.00000002004088e+20"

似乎我必须将纬度与经度以及地面点连接起来才能得到土壤深度图。我真的很困惑。任何人都可以帮我解决这类数据。

4 个答案:

答案 0 :(得分:11)

我更喜欢使用ggplot2包进行可视化。使用@plannapus的优秀解决方案:

require(reshape)
require(ggplot2); theme_set(theme_bw())
land_df = melt(land)
ggplot(aes(x = X1, y = X2, fill = value), data = land_df) + 
  geom_raster() + coord_equal() + 
  scale_fill_continuous(na.value = "transparent")

enter image description here


如果要更改轴的标题,请执行 not 更改aes中的变量名称。这些值引用数据中的列,并且更改它们会导致出现错误,X中没有名为land_df的轴。如果要更改轴上的名称:

ggplot(aes(x = X1, y = X2, fill = value), data = land_df) + 
  geom_raster() + coord_equal() + 
  scale_fill_continuous(na.value = "transparent") + 
  scale_x_continuous("X")

答案 1 :(得分:10)

library(ncdf)
# I'm assuming this is the netcdf file you are working with:
download.file("http://dods.ipsl.jussieu.fr/gswp/Fixed/SoilDepth.nc", destfile="SoilDepth.nc")
soil <- open.ncdf("SoilDepth.nc")
#The way to extract a variable is as following:
soil$var[[3]] -> var3 # here, as shown in your question, SoilDepth is the 3rd variable
get.var.ncdf(soil, var3) -> SoilDepth

dim(SoilDepth)
[1] 15238

正如您的netcdf文件摘要中所述,变量SoilDepth仅取决于维度land,而不取决于xy所以我不确定在绘制这个数据集时,这会让你离开。

修改

事实证明,有一个关键字可以链接xyland

download.file("http://dods.ipsl.jussieu.fr/gswp/Fixed/landmask_gswp.nc", destfile="landmask.nc")
landmask <- open.ncdf("landmask.nc")
landmask$var[[3]] -> varland
get.var.ncdf(landmask, varland) -> land
sum(land==1)
[1] 15238

所以为了绘制:

# The values where stored in an expected order, hence the transpose
land = t(land)
land[land==1] <- SoilDepth
land[land==0] <- NA
land = t(land)
image(land)

enter image description here

答案 2 :(得分:5)

你想用R?

来形象化它吗?

如果使用其他软件进行可视化不是问题,您可以使用 ncBrowse ,可用here Panoply ,这是一个更复杂的软件美国国家航空航天局,您可以下载here

如果您想使用R,可以使用ncdf包。借助get.var.ncdf功能,您将能够提取数据。您可以使用sp包和spplot函数绘制它,也可以使用rgl包(或者scatterplot)。

答案 3 :(得分:4)

要快速查看文件,您可以使用ncview。这些地图并不是特别漂亮,但对于了解给定文件的外观非常实用。这也适用于远程服务器。

见这里:http://meteora.ucsd.edu/~pierce/ncview_home_page.html