Вы можете попытаться интерполировать ваши значения и построить результирующий объект:
# generate data
set.seed(42)
n <- 20
x <- runif(n, min = 10, max = 20)
y <- runif(n, min = 10, max = 20)
df <- data.frame(x = x, y = y)
df$z <- 2*x^2 + 0.1*y^3
# interpolate between data points
library(akima)
Field <- with(df, interp(x = x, y = y, z = z, duplicate = "strip"))
# plot
op <- par(mar = c(4,4,1,1))
image(Field)
points(y ~ x)
par(op)