【问题标题】:How to interpolate region on vectorplot?如何在矢量图上插入区域?
【发布时间】:2016-03-25 07:05:41
【问题描述】:

继续我之前的问题'create vectorplot from velocity dataset'。我还有 2 个问题,如何使图形如下所示:

1) 如何进行区域插值?我试过用 interpolate = TRUE 但没用。
2)如何定义相同长度的箭头符号(即箭头只显示速度方向)

这里是我的数据uv.nc 和我写的语法:

library (raster)
flname <- 'uv.nc'
u <- raster(flname, varname = 'U')
v <- raster(flname, varname = 'V')
uv <- stack(u,v)
s <- sqrt(u^2 + v^2)

library(rasterVis)
jet <- colorRampPalette(c('#00007F', 'blue', '#007FFF', 'cyan','#7FFF7F', 'yellow', '#FF7F00', 'red', '#7F0000'))
range = seq(0, 0.5, 0.05)
vectorplot(uv, isField = 'dXY', interpolate = TRUE, col.regions = jet, region=s, length=0.05)

【问题讨论】:

  • 请编辑您的帖子并使其成为一个完整的示例 - 准备好在 R 环境中复制、粘贴和运行(包括library 调用、download,file 等)。我想没有多少人愿意在这里拼图来重建你的身材。
  • 当然,这里我已经完成了我的代码...根据我的代码,结果与这个图有点不同(上图)

标签: r raster r-raster levelplot


【解决方案1】:

(第一个问题)interpolate 参数需要由levelplot 调用的panel.levelplot.raster 函数(由vectorplot 在内部用于渲染背景)。但是,这不适用于当前版本的rasterVis。你可以试试这个技巧:

levelplot(s, 
          panel = panel.levelplot.raster, 
          interpolate = TRUE,
          margin = FALSE) + 
vectorplot(uv, isField = 'dXY', region = FALSE)

(第二题)箭头的长度由你的数据决定,因为你使用的是dXY = TRUE。因此,您应该使用修改数据来获得具有相同大小的向量。

uv0 <- uv / s
vectorplot(uv0, isField = 'dXY', region = s)

【讨论】:

  • 嗨@Oscar Perpiñán。对于第一个问题仍然没有产生像上面这样的数字,interpolate 命令没有给我一个好看的区域插值。
  • 那么你应该增加Raster对象的空间分辨率。你可以试试raster包提供的disaggregateresampleinterpolate函数。
  • 空间分辨率很大(1/12度~9平方千米),我在ArcGIS 9.3上创建上图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多