Я думаю, что проблема в том, что данные, которые вы предоставляете, недостаточно гладкие для интерполяции с параметрами по умолчанию. Вот один из подходов, использующий mgrid
вместо meshgrid
:
import numpy as np
import pandas as pd
from scipy.interpolate import Rbf
# fname is your data, but as a CSV file.
data = pd.read_csv(fname).values
x, y = data.T
x_min, x_max = np.amin(x), np.amax(x)
y_min, y_max = np.amin(y), np.amax(y)
# Make a grid with spacing 0.002.
grid_x, grid_y = np.mgrid[x_min:x_max:0.002, y_min:y_max:0.002]
# Make up a Z.
z = np.hamming(x.size)
# Make an n-dimensional interpolator.
rbfi = Rbf(x, y, z, smooth=2)
# Predict on the regular grid.
di = rbfi(grid_x, grid_y)
Тогда вы можете посмотреть на результат:
import matplotlib.pyplot as plt
plt.imshow(di)
Я получаю:
Я недавно написал по этой теме записную книжку Jupyter , ознакомьтесь с некоторыми другими методами интерполяции, такими как кригинг и подгонка сплайнов.