r - 将不规则的 x,y 数据点插入到规则网格中以进行轮廓映射

标签 r workflow contour spatial-interpolation

我是一名地质学家,需要在具有不同 x y z 数据集的项目中创建几百张一致的等高线图。

轮廓不规则的 x y z 数据点涉及在均匀的 x-y 网格上创建内插(外推)z 值的“网格”。在 R 之外 - 此步骤称为“网格化”。我对 R 比较陌生,并试图设置一个强大的工作流程来对大量不规则数据点进行网格化。我在挣扎!

在经典的等高线映射软件和工作流程上,步骤是:

  • 读取 x y z 数据
  • 确定最终 map 的兴趣区 (AOI)。 XMIN、XMAX、YMIN、YMAX
  • 确定网格间隔(XINT,YINT) - 将行数和列数设置为“网格”(NROW,NCOL)
  • 应用所需的插值器之一 - 在规则网格/网格上创建“z”(常见插值器是:反距离、反平方距离、加权平均、多项式、克里金法、样条等)
  • 轮廓生成的“网格”

  • 我正在尝试编写 R 脚本以完全遵循上述步骤顺序,以便在整个分析过程中实现灵活性和控制。

    df 是由示例数据集组成的数据框。
         wellid property           z        x       y
        060010        1 0.008849558 756994.5 2637732
        009410        1 0.260162602 760190.9 2622262
        009910        1 0.115044248 760898.7 2637466
        051110        1 0.109243697 761690.2 2630985
        065610        1 0.066666667 763064.1 2620929
        011010        1 0.000000000 763089.3 2630888
        035210        1 0.022556391 765942.4 2625944
        052510        1 0.157894737 767058.1 2650034
        006610        1 0.045045045 768265.0 2645318
        009010        1 0.378151261 768471.8 2636731
        011210        1 0.028776978 771393.8 2629001
        064810        1 0.428571429 771394.1 2650776
        009110        1 0.064220183 775332.6 2648531
        011410        1 0.148760331 778324.8 2633905
        065010        1 0.514851485 780480.9 2654874
        052410        1 0.173913043 780961.0 2637571
        064110        1 0.019417476 781001.5 2650994
        009310        1 0.037383178 783904.7 2641130
        010810        1 0.041237113 786200.6 2652417
        052610        1 0.150537634 788007.5 2654005
    

    感兴趣的区域是从研究区域确定的,如下所示:
        xmin <- signif(min(wellcoords$x),4) - 1000
        xmax <- signif(max(wellcoords$x),4) +1000
        ymin <- signif(min(wellcoords$y),5) - 1000
        ymax <- signif(max(wellcoords$y),5) +1000
        xrange <- xmax-xmin
        yrange <- ymax-ymin
        gridint <- 500     # grid interval is set same for xint and yint
    

    值分别为:754700、791500、26196000、2658600、36800、39000、500。

    经过多次失败的试验 - 从包中获取 interp() 函数 - akima 来进行所需的插值。感谢在“在不规则网格上绘制轮廓”下的回答
        fld<- with(df, interp(x=df$x, y=df$y, z=df$z, xo=xcoord, yo=ycoord, linear = FALSE, extrap = TRUE))
    

    这不允许我根据需要指定 AOI 控件。
    我尝试使用包 MBA,但仍致力于创建 xy.est 参数(网格网格)作为所需的输入。

    如果生成了合适的'grid',ggplot2等显示功能就足够强大了。

    是否有适当的“网格化”包或“步骤”。
    提前致谢。

    最佳答案

    我认为您不需要使用除 akima 之外的其他软件包(以及像 ggplot2 这样的图形包)。您可以将 AOI 和“网格”的数量作为 interp 的参数 xoyo .您可以通过 interp2xyz(interp.obj) 获取 xy.est 参数.

    df <- "your example data set"
    # I didn't know What wellcoords were, so I treated df as wellcoords. These values are different from what you said.
    xmin <- signif(min(df$x),4) - 1000  # 756000
    xmax <- signif(max(df$x),4) + 1000  # 789000
    ymin <- signif(min(df$y),5) - 1000  # 2619900
    ymax <- signif(max(df$y),5) + 1000  # 2655900
    gridint <- 500
    
    library(akima)
    fld<- with(df, interp(x = x, y = y, z = z, linear = FALSE, extrap = TRUE,
                          xo=seq(xmin, xmax, length=gridint), 
                          yo=seq(ymin, ymax, length=gridint)))  # give AOI and number of 'grid'
    # check whether the conditions are met.
    length(fld$x); length(fld$y); length(fld$z); range(fld$x); range(fld$y)
      # 500, 500, 250000 (=500^2), 756000 789000, 2619900 2655900,   # all OK
    
    contour(fld)   # Left graph (most basic graphic output)
    
    fld2 <- as.data.frame(interp2xyz(fld))  # the xy.est parameter (data.frame)
    library(ggplot2)
    ggplot(fld2, aes(x=x, y=y, z=z)) + geom_contour()  # Right graph (simple example)
    
    enter image description here

    关于r - 将不规则的 x,y 数据点插入到规则网格中以进行轮廓映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176265/

    相关文章:

    git - 我应该如何向 git 表明更改是暂时的并且不应提交?

    c# - Sitecore Workflow 命令抛出 "Could not find command definition"错误

    c# - EmguCV C# : FindContours() to detect different shapes

    r - 在数据框中的特定位置添加列的优雅方式

    r - 根据每组的另一个查找表有条件地为一个数据框插入值?

    r - 一个新列中跨列子集的字数统计

    plot - Gnuplot: "all contours drawn in a single color"不起作用

    R引用类和doparallel

    variables - 露天分享 : accessing bpm_comment in Activiti workflow

    python - opencv python 中的轮廓近似每次都会给出错误的结果