【问题标题】:Heatmap for nonuniformly spaced data非均匀间隔数据的热图
【发布时间】:2016-12-26 08:44:33
【问题描述】:

我想使用 matplotlib 创建一个热图,如下图所示。从轴刻度可以看出,数据不是均匀分布的。 所以假设我们有

x = [1, 1.5, 2, 2.5, 3, 3.5, 4, 5, 7]
y = [.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5]
vals = np.random.rand(len(x), len(y))

这样的插值图是如何在 matplotlib 中创建的?

【问题讨论】:

    标签: python matplotlib plot heatmap


    【解决方案1】:

    您应该插入缺失的数据,我在以下项目之一中使用过:

    #create regular grid
    xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100)
    xi, yi = np.meshgrid(xi, yi)
    
    #interpolate missing data
    rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
    zi = rbf(xi, yi)
    

    【讨论】:

      【解决方案2】:

      askorek 答案的稍微扩展版:

      import matplotlib.pyplot as plt
      import numpy as np 
      import scipy
      
      def nonuniform_imshow(x, y, z, aspect=1, cmap=plt.cm.rainbow):
        # Create regular grid
        xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100)
        xi, yi = np.meshgrid(xi, yi)
      
        # Interpolate missing data
        rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
        zi = rbf(xi, yi)
      
        _, ax = plt.subplots(figsize=(6, 6))
      
        hm = ax.imshow(zi, interpolation='nearest', cmap=cmap,
                       extent=[x.min(), x.max(), y.max(), y.min()]) 
        ax.scatter(x, y)
        ax.set_aspect(aspect)
        return hm
      
      heatmap = nonuniform_imshow(x, y, z)
      plt.colorbar(heatmap)
      plt.show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        相关资源
        最近更新 更多