【问题标题】:Interpolated heat map plot from discrete data points来自离散数据点的插值热图
【发布时间】:2021-07-21 16:28:50
【问题描述】:

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

【问题讨论】:

    标签: matplotlib


    【解决方案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)
    

    【讨论】:

    • 嗯,我得到的剧情被打乱了。你有截图可以附上你的样子吗?
    • 我的输出看起来也很混乱,但老实说,鉴于数据,我不确定会发生什么。您可以尝试转置 vals 数组以防万一。
    【解决方案2】:

    按照 Matt Pitkin 的建议,我改编了 example of scipy.interpolate.griddataplt.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), vals, (X, Y), method='cubic')
    
    plt.contourf(X, Y, interpolated_vals)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2016-06-25
      • 2017-04-12
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多