R语言 如何从netcdf文件可视化Map?

cvxl0en2  于 2023-01-03  发布在  Etcd
关注(0)|答案(4)|浏览(239)

我有一个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"

好像要把纬度和经度以及陆地点连起来才能得到土壤深度的Map,我真的很困惑,有没有人能帮我弄到这种数据。

j91ykkif

j91ykkif1#

我更喜欢使用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")

如果要更改轴的标题,请 * 不要 * 更改aes中的变量名称。这些值引用数据中的列,更改这些值会导致错误,即land_df中没有名为X的轴。如果要更改轴上的名称:

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")
tcomlyy6

tcomlyy62#

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)

b4qexyjb

b4qexyjb3#

你想用R把它可视化吗?
如果使用其他软件可视化不成问题,可以使用ncBrowse(可用here)或Panoply(NASA提供的更复杂的软件),您可以下载here
如果你想使用R,你可以使用ncdf包。你将能够提取你的数据感谢get.var.ncdf函数。你可以绘制它感谢sp包和spplot函数或使用rgl包(或scatterplot)。

p8ekf7hl

p8ekf7hl4#

为了快速查看文件,你可以使用ncview。Map不是特别漂亮,但对于了解给定文件的外观非常有用。而且这在远程服务器上也很容易工作。
参见此处:http://meteora.ucsd.edu/~pierce/ncview_home_page.html

相关问题