如何让matplotlib制作一个颜色为0的色条?

时间:2014-04-28 22:24:18

标签: python matplotlib plot colorbar contourf

我正在绘制Wigner分布的一些数据,并且在分布的极端部分,该值往往接近0.它也趋于振荡很多,使我的测试图看起来像这样: Plot of a Wigner distribution

蓝色“海洋”中的波浪具有大约1E-18的振幅,但由于它们在0附近振荡,它们会穿过彩条中的一条线。

如何制作一个颜色居中为零而不是零作为边界值的contourf()图?

1 个答案:

答案 0 :(得分:1)

我想你想要这样的东西:

class set_cbar_zero(Normalize):
  """
  set_cbar_zero(midpoint = float)       default: midpoint = 0.

  Normalizes and sets the center of any colormap to the desired valua which 
  is set using midpoint. 
  """
  def __init__(self, vmin = None, vmax = None, midpoint = 0., clip = False):
    self.midpoint = midpoint
    Normalize.__init__(self, vmin, vmax, clip)

  def __call__(self, value, clip = None):
    x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
    return numpy.ma.masked_array(numpy.interp(value, x, y))

如果我理解正确的话,你可以规范化应该解决问题的颜色条

import numpy 
import matplotlib.pylab as plt

data = numpy.random.random((30, 95))

plt.figure()
plt.imshow(data, cmap = "hot", norm = set_cbar_zero())
plt.show()