import numpy as np
import holoviews as hv
import matplotlib.pyplot as plt
from scipy.interpolate import SmoothBivariateSpline
hv.extension("bokeh")
x = np.array([-1.2, -1.9, 0.6, 3.2]).ravel()
y = -np.array([-0.7, 2.1, 1.3, 2.9]).ravel() # -y required for hv.Image order to be correct
z = np.array([1.5, 0.5, 0, 1]).ravel()
# Can increase kx and ky but only if enough points kx+1+ky+1 is the minimum
f = SmoothBivariateSpline(
x, y, z, kx=1, ky=1, bbox=[min(x), max(x), min(y), max(y)], s=15
)
xnew = np.arange(-3, 3.3, 0.05)
ynew = np.arange(-3, 3.3, 0.05)
znew = np.transpose(f(xnew, ynew))
levels = np.linspace(min(z) - 0.05, max(z), 15)