我有一组离散的稀疏点(x、y、值)。我想绘制数据,以便根据附近数据点之间的插值为每个 (x, y) 坐标赋予一种颜色。
data = np.array([
[0, 0, 18.75],
[0, 2, 0],
[0, 4, 16],
[0, 6, 2],
[-4, 2, 18],
[-4, 4, 35],
[-4, 6, 32],
[-4, 8, 15],
[-4, 10, 28],
[4, 0, 26],
[4, 2, 30],
[4, 4, 32],
[4, 6, 35],
[4, 8, 26.5],
])
我曾尝试使用 pcolormesh
,但它希望我的 C
值是一个二维数组。我怎样才能做到这一点?
答案 0 :(得分:1)
您可以尝试使用 contourf
并执行以下操作:
from matplotlib import pyplot as plt
# create mesh grid for x/y-data
grid = np.meshgrid(data[:,0], data[:,1])
# create 2D array of z-values
vals = np.zeros((len(data), len(data)))
for row in data:
vals[(grid[0] == row[0]) & (grid[1] == row[1])] = row[2]
# create contour plot
plt.contourf(data[:, 0], data[:, 1], vals)
答案 1 :(得分:1)
我根据 Matt Pitkin 的建议改编了一个 example of scipy.interpolate.griddata
,带有 plt.contourf()
:
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata
x, y, vals = data[:,0], data[:,1], data[:,2]
X, Y = np.meshgrid(
np.linspace(np.min(x), np.max(x), 100),
np.linspace(np.min(y), np.max(y), 100)
)
interpolated_vals = griddata((x, y), data[:,2], (X, Y), method='cubic')
plt.contourf(X, Y, interpolated_vals)
plt.show()