1 回答

TA贡献2080条经验 获得超4个赞
我修改了输入数据(shuffle indie_coords_y)。此外,必须对网格的所有点执行插值。np.meshgrid用于构建完整的网格。.flatten()用于将网格转换为点列表(即形状为 number_of_points x number_of_dim 的数组)。插值后,reshape用于将点列表转换回网格(两个 n × n 数组)。
现在插值和图形正在工作:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
# Data
indie_coords_y = [195, 2195, 3195, 2695, 3695, 4695, 695, 1195, 1695, 4195] # Modified!
# using np.random.shuffle(indie_coords_y)
indie_coords_x = [87,90,92,95,97,100,103,105,107,110]
z1_final = [12,13,14,15,16,17,18,19,20,21]
# Interpolation
xi = np.linspace(80, 120.0, 30) # modified range
yi = np.linspace(0, 5000.0, 30)
X_grid, Y_grid = np.meshgrid(xi, yi) # Create a grid (i.e. 100x100 arrays)
zi = griddata((indie_coords_x, indie_coords_y), z1_final,
(X_grid.flatten(), Y_grid.flatten()), method='linear')
Z_grid = zi.reshape( X_grid.shape )
# Graph
CS = plt.contourf(X_grid, Y_grid, Z_grid, cmap='jet')
plt.plot(indie_coords_x, indie_coords_y, 'ko', label='data points')
plt.plot(X_grid.flatten(), Y_grid.flatten(), 'r,', label='interpolation points')
plt.xlabel('x'); plt.ylabel('y');
plt.colorbar(); plt.legend();
该图是:
添加回答
举报