首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy的histogram2d和色彩映射表的问题

numpy的histogram2d和色彩映射表的问题
EN

Stack Overflow用户
提问于 2014-02-21 00:46:29
回答 1查看 502关注 0票数 0

在右边,我得到了1000个矩阵的特征值谱,它们相互散布在一起。在左边,我想要得到一个直方图和密度函数,以确定特征值出现的位置和频率。

直方图是用numpy完成的:

代码语言:javascript
复制
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中的特征值的数量,我希望直方图仍然清楚地显示特征值出现在哪里,没有出现在哪里。所以我做了我自己的颜色映射表:

代码语言:javascript
复制
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也有的地块。)然后我画出了:

代码语言:javascript
复制
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')

因此,假设2D图中的一个点是白色的,如果该点的特征值恰好为零。否则,它应该是蓝色和红色之间的任何颜色。但这不是我能得到的。似乎直方图或色彩映射表将小值舍入为零,因为我在直方图中得到的蓝色区域太小。有什么想法吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-02-21 02:32:15

你需要自己的色彩映射表,而不是其中一个内置的缩放版本,这有什么原因吗?如果不是,那么就使用内置的颜色映射,看看是否可以这样做。您可以随时调整颜色稍后。

如果你真的需要自己的色彩映射表,那么我怀疑色彩映射表还不能正常工作。您是否可以修改register_cmap以首先创建LinearSegmentedColor映射,然后注册该映射?http://matplotlib.org/api/colors_api.html#matplotlib.colors.LinearSegmentedColormap

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

其次,为了跟上文档,我将cdict的定义从元组的元组字典转换为元组列表的字典。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21914255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档