gpt4 book ai didi

R裁剪栅格数据和设置轴限制

转载 作者:行者123 更新时间:2023-12-04 03:58:34 26 4
gpt4 key购买 nike

在另一个线程的帮助下,我设法绘制了一些全局 map 。首先,我将气象GRIB2数据转换为Netcdf,然后绘制全局 map 。

现在,我只想绘制 map 的一个子区域。我尝试了crop命令,并成功提取了全局nc文件的子区域。但是在绘制时,我找不到如何控制轴限制。它绘制的 map 大于数据区域,因此两侧都出现大的空白。

这是我用来绘制 map 的脚本

library("ncdf")
library("raster")
library("maptools")

DIA=format(Sys.time(), "%Y%m%d00") # Data d'avui
url=sprintf("ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.%s/gfs.t00z.pgrb2f00", DIA) # Ruta del ftp
loc=file.path(sprintf("%s",url))
download.file(loc,"gfs.grb",mode="wb")

system("/usr/bin/grib2/wgrib2/wgrib2 -s gfs.grb | grep :TMP: | /usr/bin/grib2/wgrib2/wgrib2 -i gfs.grb -netcdf temp.nc",intern=T)

t2m <- raster("temp.nc", varname = "TMP_2maboveground")
rt2m <- rotate(t2m)
t2mc=rt2m-273.15

DAY=format(Sys.time(), "%Y%m%d") # Data d'avui

e=extent(-40,40,20,90)
tt=crop(t2mc,e)

png(filename="gfs.png",width=700,height=600,bg="white")
rgb.palette <- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"), space = "rgb")#colors
plot(tt,col=rgb.palette(200),main=as.expression(paste("Temperatura a 2m ",DAY," + 00 UTC",sep="")),axes=T)
dev.off()

给出这个输出。

它必须是简单的,但我是简单的R用户。提前致谢。

编辑:按建议添加xlim = c(-40,40),ylim = c(20,90)时的新输出。似乎无法解决问题。但是使用输出png文件的x,y大小看起来很有希望,因为我可以调整大小以适合 map 。确定它必须是另一种解决方案,我找不到合适的解决方案。

最佳答案

下载数据文件后,我可以直接阅读
栅格。我选择乐队221(如果我没记错的话)是你
需要根据
this table:

library("raster")
t2mc <- raster('gfs.grb', band=221)

> t2mc
class : RasterLayer
band : 221 (of 315 bands)
dimensions : 361, 720, 259920 (nrow, ncol, ncell)
resolution : 0.5, 0.5 (x, y)
extent : -0.25, 359.75, -90.25, 90.25 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +a=6371229 +b=6371229 +no_defs
data source : /home/oscar/gfs.grb
names : gfs

您不需要整个范围,因此您可以使用 crop来获取
所需范围:
e <- extent(-40,40,20,90)
tt <- crop(t2mc,e)

我试图用 tt显示 plot光栅而没有
成功。但是,如果您使用
不同程度(89.5而不是90):
e <- extent(-40,40,20,89.5)
tt <- crop(t2mc,e)

spplot(tt)

现在,我们必须添加管理边界:
library(maps)
library(mapdata)
library(maptools)

ext <- as.vector(e)
boundaries <- map('worldHires',
xlim=ext[1:2], ylim=ext[3:4],
plot=FALSE)
boundaries <- map2SpatialLines(boundaries,
proj4string=CRS(projection(tt)))

并更改调色板:
rgb.palette <- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"),
space = "rgb")

spplot(tt, col.regions=rgb.palette,
colorkey=list(height=0.3),
sp.layout=list('sp.lines', boundaries, lwd=0.5))

如果您喜欢 spplot方法,则可以实现
与此代码类似的结果:
library(rasterVis)
levelplot(tt, col.regions=rgb.palette,
colorkey=list(height=.3)) +
layer(sp.lines(boundaries, lwd=0.5))

关于R裁剪栅格数据和设置轴限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com