отображение и раскрашивание данных на нерегулярной сетке

У меня есть данные в форме (x, y, z), где x и y не входят в регулярную сетку. Я хочу отобразить двухмерную цветовую карту этих данных с интенсивностью (например, шкалой серого), сопоставленной с переменной 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)

enter image description here

. Однако при этом теряется информация о начальной сетке (положение точек с фактическими данными), которая может быть очень точной или очень грубой в определенных местах. Я бы предпочел отложить мозаику с треугольниками, которая точно представляет фактическое расположение и плотность исходных точек данных.

В идеале решение

  • должно вычислять мозаику вне функции построения графика, так что полученные полигоны могут быть построены либо с помощью ggplot2 , решетки , либо с базовой графикой

  • быть быстрым. В моем примере из реальной жизни (~ 1e5 баллов) вычисление тесселяции с помощью deldir может быть очень медленным.

Под "тесселяцией" я подразумеваю либо треугольники Делоне, либо диаграммы Вороного, хотя я предпочитаю быть за первое. Однако это приводит к дополнительной сложности интерполяции цвета каждого треугольника на основе исходных точек данных.

10
задан baptiste 14 December 2016 в 05:41
поделиться