matplotlib 2d histrogram heatmap--如何使用我的数据集制作一个?

时间:2017-01-18 03:51:05

标签: python numpy matplotlib

我是python的新手 我有一个像

这样的数据集
import numpy as np
from matplotlib import pyplot as plt     
dats = np.array([r1,x1,y1],[r2,x2,y2],...])

我想分别在位置(x1,y1),(x2,y2)等处绘制与r1,r2,...相关的颜色强度。

如何以matplotlib可以在2D直方图中使用的格式操作此数据集?
任何帮助非常感谢。一旦我获得了一些技巧,我会帮助别人:o

3 个答案:

答案 0 :(得分:1)

为了制作2D直方图,您的数据集必须包含两个数据值,而不是一个数据值和两个索引。因此,您需要两个数组:一个包含r1值,另一个包含r2值。您的数据没有任何r2值,因此,您无法计算二维直方图。

关于你的问题,你甚至不想要直方图。您只想在平面上可视化r1值。这很简单。比方说,您的数组dats的长度为100,然后是:

rs = dats[:, 0]    # retrieve r-values from dats

plt.imshow(rs.reshape(10, 10), cmap='Greys', interpolation='None')
plt.colorbar()

答案 1 :(得分:0)

您可以使用griddata从一组点创建插值数据,假设x = [x1, x2, etc]r = [r1, r2, etc]

#Setup a grid
xi = np.linspace(x.min(),x,max(),100)
yi = np.linspace(y.min(),y.max(),100)
zi = griddata(x, y, r, xi, yi, interp='linear')

#Plot the colormap
cm = plt.pcolormesh(xi,yi,zi)
plt.colorbar()
plt.show()

其他选项包括着色散点图,

plt.scatter(x,y,c=r)

scipy中有一个2D直方图函数,您可以根据r设置权重,

H, xedges, yedges = np.histogram2d(x, y, w_i = r)

我还没有亲自使用过最后一个。

答案 2 :(得分:0)

我认为你要找的不是直方图而是等高线图(直方图会计算落入垃圾箱的坐标(x,y)的出现次数)。

如果您的数据不在网格上,则可以使用tricontourf

plt.tricontourf(dats[:,1],dats[:,2],dats[:,0],cmap='hot')
plt.colorbar()
plt.show()

有更多方法可以绘制此图,例如散点图等。