所以在右边我得到了 1000 个矩阵的特征值谱,它们相互散布。在左侧,我想获得一个直方图或密度函数,以了解特征值出现的位置和频率。
直方图是用 numpy 完成的:
bins = 200
d = max(max(re), max(im), -min(re), -min(im))
histogram2D, binsX, binsY = np.histogram2d(re, im, bins=bins, range=((-d,d),(-d,d)))
histogram2D = histogram2D.T
除了每个 bin 中的特征值数量之外,我希望直方图仍能清楚地显示特征值出现的位置和没有出现的位置。所以我制作了自己的颜色图:
def redblue_zeta(Zmin, Zmax, zeta=0.0):
breakingpoint = float(Zmin)+float(zeta)/(float(Zmax)-float(Zmin))
cdict = {'red': ((0.0, 1.0, 1.0), (breakingpoint, 1.0, 0.0), (1.0, 1.0, 1.0)),
'green': ((0.0, 1.0, 1.0), (breakingpoint, 1.0, 0.0), (1.0, 0.0, 0.0)),
'blue': ((0.0, 1.0, 1.0), (breakingpoint, 1.0, 1.0), (1.0, 0.0, 0.0))}
return(cdict)
(这有点复杂,因为我将地图用于 zeta>0 的其他图。)然后我绘制了:
Zmax = histogram2D.max()
cdict=cc.redblue_zeta(0,Zmax,zeta=0.0)
plt.register_cmap(name='rb', data=cdict)
plt.imshow(histogram2D, cmap=cm.get_cmap('rb'), extent=[-d, d, -d, d], interpolation='nearest')
因此,如果该 bin 中的特征值恰好为零,则 2D 图中的一个点应该是白色的。否则它应该是蓝色和红色之间的任何东西。但这不是我得到的。似乎直方图或颜色图将小值四舍五入为零,因为我在直方图中得到了一个太小的蓝色区域。有任何想法吗?谢谢。