我有一个 Nx3 数组,它存储 N 坐标中的值。第一列和第二列分别对应于 x 和 y 坐标,第三列表示该坐标处的值。我想绘制二维强度图,最好的方法是什么?
如果坐标间隔均匀,那么我可以使用meshgrid
,然后使用imshow
,但在我的数据中,坐标间隔不均匀。此外,数组非常大,N~100000,并且值(第三列)跨越几个数量级(所以我应该使用对数图?)。绘制这样的图表的最佳方法是什么?
最佳答案
您可以使用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())
并关闭点的外边缘,使它们组成连续的图片。
关于arrays - 如何在 matplotlib 中绘制 2D 强度图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39333235/