首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制空间显式hdf5文件?-r-光栅

如何绘制空间显式hdf5文件?-r-光栅
EN

Stack Overflow用户
提问于 2015-06-26 20:42:01
回答 1查看 444关注 0票数 0

我有一个具有lat/long和十几个值的hdf5数据文件,例如温度。我想要绘制,这样我就可以将数据可视化为地图样式,在轴上有lat/long。有直接的办法吗?我只是在博客上找到了一种非常复杂的方式。对于netcdf数据,我只需使用绘图(Ncvariable),它就可以工作,而不是使用hdf5文件。

我正在使用rhdf5。如果我读取h5文件和一个特定的值,我只会得到一个向量。

代码语言:javascript
复制
> library(rhdf5)
> ncep<-h5read("CB_OL1_1979OCT.h5", "sh")
> head(ncep)
[1]  1.03953242  0.79024571  2.29503083  0.43957919  0.36909071 -0.04498866

我正在附上文件。我不确定你会称它为三维,它是一个简单的光栅x,y,值。h5文件

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-17 18:55:39

您已经有一段时间没有问了,但是如果您还没有找到解决方案,我想提供两种方法来解决这个问题。

由于您的hdf5文件不再可用,所以我选择了一个提供这里的随机文件作为说明。

一方面,在使用plot(grid = TRUE)读取了hdf5文件之后,您可以简单地使用来自rast()的hdf5

代码语言:javascript
复制
library(terra)
#> terra 1.6.17

# read netcdf file
r <- rast("AMSR_E_L3_DailyOcean_V04_20020619.hdf") 

# get layer names
names(r)
#> [1] "Very_low_res_sst" "Low_res_sst"      "Low_res_wind"     "Med_res_wind"    
#> [5] "Med_res_vapor"    "High_res_cloud"   "RFI_angle"

# subset dataset by layer name
rs <- r[["Med_res_vapor"]]
rs
#> class       : SpatRaster 
#> dimensions  : 720, 1440, 1  (nrow, ncol, nlyr)
#> resolution  : 0.25, 0.25  (x, y)
#> extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat Unknown datum based upon the Clarke 1866 ellipsoid 
#> source      : AMSR_E_L3_DailyOcean_V04_20020619.hdf:GlobalGrid:Med_res_vapor 
#> varname     : AMSR_E_L3_DailyOcean_V04_20020619 
#> name        : Med_res_vapor

plot(rs, grid = TRUE)

或者您可以选择稍微复杂一点的解决方案,首先使用sf::st_graticules()手动生成网格,然后使用{tidyterra}{ggplot2}与来自{terra}的SpatRaster和SpatVector对象一起使用。

代码语言:javascript
复制
library(sf)
#> Linking to GEOS 3.9.1, GDAL 3.4.3, PROJ 7.2.1; sf_use_s2() is TRUE
library(ggplot2)
library(tidyterra)

grat <- st_graticule(lon = seq(-180, 180, 30),
                     lat = seq(-90, 90, 30),
                     ndiscr = 100) |> 
  st_transform("epsg:4326") |> 
  vect()

ggplot() +
  geom_spatraster(data = rs) +
  geom_spatvector(data = grat, color = alpha("grey60", 0.5)) +
  coord_sf(expand = FALSE) +
  scale_x_continuous(breaks = seq(-180, 180, 30)) +
  scale_y_continuous(breaks = seq(-90, 90, 30))
#> SpatRaster resampled to ncells = 5e+05

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31081825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档