2014-12-05 107 views
2

我想绘制包含正数和负数的二维直方图。我有下面的代码使用pcolormesh,但我无法指定颜色级别强制白色对应于零(即,我希望我的颜色条在零周围对称)。我也试过imshow。matplotlib:如何指定二维历史图中的颜色水平

我知道你可以在plt.contour和plt.contourf中指定颜色级别,但是我找不到用块绘制二维直方图的方法。

任何意见将不胜感激。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import cm as CM 

fig = plt.figure() 

# create an example histogram which is asymmetrical around zero 
x = np.random.rand(400) 
y = np.random.rand(400)  
Z, xedges, yedges = np.histogram2d(x, y, bins=10) 
Z = Z - 2. 

plt.pcolormesh(xedges, yedges, Z, cmap=CM.RdBu_r) 

plt.colorbar() 
plt.savefig('test.png') 

enter image description here

回答

0

添加vminvmax参数与绝对值相等的

plt.pcolormesh(xedges, yedges, Z, cmap=CM.RdBu_r, vmin=-7, vmax=7) 

,看看你喜欢的结果

enter image description here

3

由于http://nbviewer.ipython.org/gist/pelson/5628989

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.colors import from_levels_and_colors 

x = np.random.rand(400) 
y = np.random.rand(400) 
Z, xedges, yedges = np.histogram2d(x, y, bins=10) 
Z = Z - 2. 
# -1 0 3 6 9 
cmap, norm = from_levels_and_colors([-1, 0, 3, 6, 9, 12], ['r', 'b', 'g', 'y', 'm']) # mention levels and colors here 
plt.pcolormesh(xedges, yedges, Z, cmap=cmap, norm=norm) 
plt.colorbar() 
plt.show() 

enter image description here