如何在合并相似单元格的情况下保存 levelplot()

How to save levelplot() with like cells merged

假设我有一个轮廓如下的热图:

set.seed(1)
X <- matrix(runif(100*200),nrow=100)
X <- apply(X,1,sort)
#png("Surface.png",width=800,height=400)
lattice::levelplot(t(X),contour=TRUE)
#dev.off()
getwd()

看起来像这样:

在 R(fields::image.plot()image() 等中有很多方法可以制作它的变体。如果我将这个填充的等高线图保存为 pdf,它是 squeaky-clean 矢量图像,我可以重新缩放并包含在会议海报中(使用例如 Inkscape)。事实证明,在这种情况下,like-colored 区域实际上是单独的栅格单元,而不是合并的多边形,这意味着有大量的顶点, 在海报中包含几个这样的表面后,它会占用内存并减慢 Inkscape 的速度。最简单的解决方案是从 R 中保存到理想的 merged-cell 格式,其中连续的 like-colored 区域是 unified/merged polygon()s 或类似的,从而将顶点数减少一个数量级或更多。

我的问题是是否有一些表面功能已经默认执行此操作,或者是否有一种省力的方式来模拟这种表面输出。 high-effort 方法将深入研究 R 的空间函数以合并类似的单元格,但我宁愿避免这种情况。提前致谢!

这是"high-effort approach"(不是真的)

set.seed(1)
X <- matrix(runif(100*200),nrow=100)
X <- apply(X,1,sort)
lattice::levelplot(X,contour=TRUE)

library(raster)
r <- raster(X)
z <- cut(r, seq(0, 1, 0.1))
p <- rasterToPolygons(z, dissolve=TRUE)
spplot(p)