我是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
答案 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()
有更多方法可以绘制此图,例如散点图等。