我有一个具有lat/long和十几个值的hdf5数据文件,例如温度。我想要绘制,这样我就可以将数据可视化为地图样式,在轴上有lat/long。有直接的办法吗?我只是在博客上找到了一种非常复杂的方式。对于netcdf数据,我只需使用绘图(Ncvariable),它就可以工作,而不是使用hdf5文件。
我正在使用rhdf5。如果我读取h5文件和一个特定的值,我只会得到一个向量。
> 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文件
发布于 2022-10-17 18:55:39
您已经有一段时间没有问了,但是如果您还没有找到解决方案,我想提供两种方法来解决这个问题。
由于您的hdf5文件不再可用,所以我选择了一个提供这里的随机文件作为说明。
一方面,在使用plot(grid = TRUE)读取了hdf5文件之后,您可以简单地使用来自rast()的hdf5
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对象一起使用。
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

https://stackoverflow.com/questions/31081825
复制相似问题