Как сохранить levelplot () с объединенными одинаковыми ячейками

Скажем, у меня есть тепловая карта с такими контурами:

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, это будет чистое векторное изображение, которое я могу масштабировать и включить в плакат конференции (используя например, Inkscape). В этом случае оказывается, что области одинакового цвета на самом деле являются отдельными ячейками растра, а не объединенными полигонами, подразумевающими очень большое количество вершин, что потребляет память и замедляет работу Inkscape после включения пары таких поверхностей в плакат. Самым простым решением было бы сохранить идеальный формат объединенных ячеек из R, где смежные области одинакового цвета объединяются / объединяются polygon()s или аналогичным образом, тем самым уменьшая количество вершин на порядок или больше.

Мой вопрос в том, есть ли какая-нибудь функция поверхности, которая уже делает это по умолчанию, или способ с минимальными усилиями имитировать такой вывод поверхности. Подход, требующий больших усилий, заключался бы в том, чтобы погрузиться в пространственные функции R для слияния подобных ячеек, но я бы предпочел этого избежать. Заранее спасибо!


person tim riffe    schedule 24.04.2015    source источник
comment
Имеет ли значение добавление panel = panel.levelplot.raster внутрь levelplot?   -  person    schedule 24.04.2015
comment
@Pascal К сожалению, нет. Если я сохраню его в pdf, используя растровую опцию, то я все равно получу большое количество маленьких квадратных ячеек, так что это не срежет его. Спасибо хоть   -  person tim riffe    schedule 24.04.2015


Ответы (1)


Вот «подход с высокими усилиями» (не совсем)

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)
person Robert Hijmans    schedule 24.04.2015