如何在matplotlib中绘制2D强度图?

时间:2016-09-05 14:57:21

标签: arrays matplotlib plot scatter-plot imshow

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

如果坐标是均匀间隔的,那么我可以使用partial然后使用meshgrid,但在我的数据中,坐标的间距不均匀。此外,阵列非常大N~100000,值(第三列)跨越几个数量级(所以我应该使用logplot?)。绘制这样一张图的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用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())

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