bap*_*ste 10 voronoi r delaunay tesselation spatstat
我有(x,y,z)形式的数据,其中x和y不在常规网格上.我希望显示这些数据的2D色彩图,其中强度(例如,灰度)映射到z变量.一个明显的解决方案是在常规网格上插值(见下文),
d <- data.frame(x=runif(1e3, 0, 30), y=runif(1e3, 0, 30))
d$z = (d$x - 15)^2 + (d$y - 15)^2
library(akima)
d2 <- with(d, interp(x, y, z, xo=seq(0, 30, length = 30),
yo=seq(0, 30, length = 50), duplicate="mean"))
pal1 <- grey(seq(0,1,leng=500))
with(d2, image(sort(x), sort(y), z, useRaster=TRUE, col = pal1))
points(d$x, d$y, col="white", bg=grey(d$z/max(d$z)), pch=21, cex=1,lwd=0.1)
Run Code Online (Sandbox Code Playgroud)
然而,这会丢失初始网格的信息(点与实际数据的位置),这些信息在某些位置可能非常精细或非常粗糙.我倾向于使用三角形进行delaunay平铺,这准确地表示原始数据点的实际位置和密度.
理想情况下,解决方案会
计算镶嵌绘图功能的外部,使得所得到的多边形可以与任一被绘制ggplot2,lattice或碱图形
快点 在我的实际例子中(~1e5分),tesselation via的计算deldir可能非常慢.
通过"tesselation"我的意思是Delaunay三角形或Voronoi图,虽然我的偏好是前者.然而,它带来了基于原始数据点插入每个三角形的颜色的额外复杂性.
这是一个基于dirichlet包的解决方案maptools,
d <- data.frame(x=runif(1e3, 0, 30), y=runif(1e3, 0, 30))
d$z = (d$x - 15)^2 + (d$y - 15)^2
library(spatstat)
library(maptools)
W <- ripras(df, shape="rectangle")
W <- owin(c(0, 30), c(0, 30))
X <- as.ppp(d, W=W)
Y <- dirichlet(X)
Z <- as(Y, "SpatialPolygons")
plot(Z, col=grey(d$z/max(d$z)))
Run Code Online (Sandbox Code Playgroud)

我仍然不确定从 SpatialPolygons 类中提取多边形的方法。
另外,如果有一种简单的方法可以为相关的 delaunay 镶嵌生成“正确”的颜色,我也想听听。