来自离散数据点的内插热图

时间:2021-07-21 16:28:50

标签: matplotlib

我有一组离散的稀疏点(xy)。我想绘制数据,以便根据附近数据点之间的插值为每个 (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 值是一个二维数组。我怎样才能做到这一点?

2 个答案:

答案 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()