【问题标题】:Issue with numpy's histogram2d and colormapsnumpy 的 histogram2d 和颜色图问题
【发布时间】:2014-02-20 16:46:29
【问题描述】:

所以在右边我得到了 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 图中的一个点应该是白色的。否则它应该是蓝色和红色之间的任何东西。但这不是我得到的。似乎直方图或颜色图将小值四舍五入为零,因为我在直方图中得到了一个太小的蓝色区域。有任何想法吗?谢谢。

【问题讨论】:

    标签: python numpy matplotlib color-mapping histogram2d


    【解决方案1】:

    是否有理由需要您自己的颜色图,而不是其中一个内置插件的缩放版本?如果没有,则转到内置颜色图,看看是否可以使其工作。您可以随时调整颜色。

    如果您确实需要自己的颜色图,那么我怀疑颜色图还不能正常工作。您可以修改 register_cmap 以首先创建 LinearSegmentedColor 贴图,然后注册该贴图吗? http://matplotlib.org/api/colors_api.html#matplotlib.colors.LinearSegmentedColormap

    您是否尝试过仅显示地图以查看其外观?

    其次,为了遵循文档,我会将 cdict 的定义从元组的元组字典切换到元组列表的字典。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-23
      • 2018-07-30
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2020-09-16
      相关资源
      最近更新 更多