【问题标题】:Error plotting data from netcdf file "increasing x y values expected"从 netcdf 文件绘制数据时出错“预期增加 x y 值”
【发布时间】:2013-04-27 13:24:39
【问题描述】:

我想从常规网格中绘制海面温度数据,但找不到正确的方法。我的数据采用 nc 格式 并且可以从http://www.nodc.noaa.gov/SatelliteData/pathfinder4km/下载

我使用此 R 代码访问数据,但在尝试绘图时出现问题

library("ncdf")
download.file("ftp://ftp.nodc.noaa.gov/pub/data.nodc/pathfinder/Version5.2/2003/20030715000715-NODC-L3C_GHRSST-SSTskin-AVHRR_Pathfinder-PFV5.2_NOAA17_G_2003196_night-v02.0-fv02.0.nc", destfile="sst.nc")
data=open.ncdf("sst.nc")
x <- get.var.ncdf(data,"lon")
y <- get.var.ncdf(data,"lat")
sst=get.var.ncdf(data,"sea_surface_temperature")

filled.contour(x,y,sst, color = terrain.colors, asp = 1)

然后得到这个错误信息

错误 enfilled.contour(x, y, sst, color = terrain.colors, asp = 1) : 期望增加“x”和“y”值

我认为问题来自 y 坐标,纬度从 90 到 -90。我在用 akima 创建新网格时看到了一些关于 stackoverflow 的问题 包,但在这种情况下应该没有必要。

在这里你可以找到数据文件的摘要

http://ubuntuone.com/1mIdYVqoePn24gKQbtXy7K

提前感谢您的帮助

已解决

感谢保罗·海姆斯特拉

该点不是从数据集中读取经纬度值,而是要知道矩阵中数据点的 i,j 坐标,然后选择我要绘制的地理区域。以下是对我有用的命令:

library("ncdf")
download.file("ftp://ftp.nodc.noaa.gov/pub/data.nodc/pathfinder/Version5.2/2003/20030715000715-NODC-L3C_GHRSST-SSTskin-AVHRR_Pathfinder-PFV5.2_NOAA17_G_2003196_night-v02.0-fv02.0.nc", destfile="sst.nc")
data=open.ncdf("sst.nc")
sst=get.var.ncdf(data,"sea_surface_temperature")
x = seq(1, 8640, length.out = nrow(sst))         # Matrix dimension 8640x4320
y = seq(1, 4320, length.out = ncol(sst))

sst1 <- sst[c(1000:1500),c(1000:1500)]           # Subsetting a region
x = seq(1, 500, length.out = nrow(sst1))
y = seq(1, 500, length.out = ncol(sst1))

png(filename="sst.png",width=800,height=600,bg="white")
filled.contour(x,y,sst1, color = terrain.colors, asp = 1)
dev.off()

现在我必须弄清楚如何在 x-y 坐标处用经度和纬度标记绘图。

【问题讨论】:

    标签: r plot netcdf


    【解决方案1】:

    问题大概如下。您的xy 变量的大小与sst 相同,即它们提供xy 坐标的映射。 filled_contour 函数需要的不是这些映射,而是更简单的 xy 坐标,它们与 sst 中的行和列相关联,x 值增加。

    【讨论】:

    • 感谢您回答保罗。那么,我应该向 fill_contour 或 image.plot 提供什么?如果我想在轴标签中显示纬度和经度怎么办?
    • 您应该向filled.contour 提供两个向量,将行和列映射到纬度和经度。您甚至可以使用image 而不指定纬度和经度。
    • 您好,我不是一个经验丰富的 R 用户,所以我不确定如何按照您的说法映射行和列。你能指出我可以阅读的任何信息来寻找吗?谢谢
    • filled.contour 的文档准确地说明了您需要什么:?filled.contour
    • 感谢您的帮助 Paul,它现在可以正常工作了。现在我必须弄清楚如何使用 lat-lon 来标记轴。
    【解决方案2】:

    虽然我的问题在 Paul Hiemstra 的帮助下得到了解决,但我仍然对绘制我的 netcdf 数据进行了调查,并在 Stackoverflow 中发现了另一个对我也有帮助的线程。它使用图像而不是填充轮廓。

    你可以在The variable from a netcdf file comes out flipped找到这个帖子

    现在,这是我用来绘制 SST 数据的代码:

    library("ncdf")
    download.file("ftp://ftp.nodc.noaa.gov/pub/data.nodc/pathfinder/Version5.2/2000/20000107010122-NODC-L3C_GHRSST-SSTskin-AVHRR_Pathfinder-PFV5.2_NOAA14_G_2000007_night-v02.0-fv01.0.nc", destfile="sst.nc")
    data=open.ncdf("sst.nc")
    
    
    sst=get.var.ncdf(data,"sea_surface_temperature")
    lon=get.var.ncdf(data,"lon")
    lat=get.var.ncdf(data,"lat")
    
    data$dim$lon$vals -> lon
    data$dim$lat$vals -> lat
    lat <- rev(lat)
    sst <- sst[,ncol(sst):1]
    png(filename="sst2.png",width=1215,height=607,bg="white")
    image(lon, lat, sst, zlim=c(270,320), col = heat.colors(37))
    library("sp", lib.loc="/usr/lib/R/site-library")
    library("maptools", lib.loc="/usr/lib/R/site-library")
    data(wrld_simpl)
    plot(wrld_simpl, add = TRUE)
    dev.off()
    

    这导致了这个图像:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多