我是一名地质学家,需要在具有不同x y z数据集的项目中创建几百个一致的等高线图。
轮廓不规则的x y z数据点涉及在均匀的x-y网格处创建内插(外推)z值的“网格”。在R外 - 这一步称为'网格'。我对R来说相对较新,并试图设置一个强大的工作流来网格化大量的不规则数据点。我在挣扎!
在经典轮廓绘图软件和工作流程上,步骤如下:
我正在尝试编写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参数(网格网格)作为必需的输入。
如果生成了正确的'网格',ggplot2和其他显示功能都很强大且充足。
是否有正确的'网格'包或'步骤'。 提前谢谢。
答案 0 :(得分:4)
我认为您不必使用除akima
之外的其他包(以及ggplot2
等图形包)。您可以将AOI和No'grid'作为interp的参数xo
和yo
。你可以通过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 NO 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)