【问题标题】:how to plot 2D intensity plot in matplotlib?如何在 matplotlib 中绘制 2D 强度图?
【发布时间】:2016-09-05 14:57:21
【问题描述】:

我有一个 Nx3 数组,它将值存储在 N 个坐标中。第一列和第二列分别对应 x 和 y 坐标,第三列表示该坐标处的值。我想绘制一个 2D 强度图,最好的方法是什么?

如果坐标是均匀分布的,那么我可以使用meshgrid,然后使用imshow,但在我的数据中,坐标不是均匀分布的。此外,数组非常大 N~100000,并且值(第三列)跨越几个数量级(所以我应该使用对数图?)。绘制此类图表的最佳方法是什么?

【问题讨论】:

    标签: arrays matplotlib plot scatter-plot imshow


    【解决方案1】:

    您可以使用griddata 将您的数据插值到所有100000 点到一个统一的网格(比如100 x 100),然后用颜色的对数缩放来绘制所有内容,

    x = data[:,0]
    y = data[:,1]
    z = data[:,2]
    
    # define grid.
    xi = np.linspace(np.min(x),np.max(x),100)
    yi = np.linspace(np.min(y),np.max(y),100)
    
    # grid the data.
    zi = griddata(x,y,z,xi,yi,interp='linear')
    
    #pcolormesh of interpolated uniform grid with log colormap
    plt.pcolormesh(xi,yi,zi,norm=matplotlib.colors.LogNorm())
    
    plt.colormap()
    plt.show()
    

    我没有对此进行测试,但基本想法应该是正确的。这样做的好处是您不需要知道原始(大型)数据集,并且可以简单地使用网格数据 xi、yi 和 zi。

    另一种方法是为散点图着色,

    plt.scatter(x, y, c=z,edgecolors='none', norm=matplotlib.colors.LogNorm())
    

    并关闭点的外边缘,使它们构成连续图片。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2015-08-02
      • 2016-01-21
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      相关资源
      最近更新 更多