2012-02-26 75 views
3

我密謀使用問題與零點在matplotlib.colors.LogNorm

plt.imshow(hist2d, norm = LogNorm(), cmap = gray) 

其中hist2d是直方圖值矩陣的直方圖。這工作正常,除了hist2d爲零的元素。特別是,我得到下面的圖像

Histogram

但想白色斑塊爲黑色。

謝謝!

回答

1

如果你滿意的顏色比例原樣,且只想在0值是黑色的,我想簡單地改變輸入矩陣,使得0是用下一個最小的值改爲:

import matplotlib.pyplot as plt 
import matplotlib.cm, matplotlib.colors 
import numpy 

hist2d = numpy.arange(9).reshape(3,3) 

plt.imshow(numpy.maximum(hist2d, sorted(hist2d.flat)[1]), 
      interpolation='nearest', 
      norm = matplotlib.colors.LogNorm(), 
      cmap = matplotlib.cm.gray) 

產生

0->mimimum picture

8

,不需要通過設置壞像素的RGB值與您的數據渣土的另一種方法。

import copy 
data = np.arange(25).reshape((5,5)) 
my_cmap = copy.copy(matplotlib.cm.get_cmap('gray')) # copy the default cmap 
my_cmap.set_bad((0,0,0)) 
plt.imshow(data, 
      norm=matplotlib.colors.LogNorm(), 
      interpolation='nearest', 
      cmap=my_cmap) 

的問題是不是與0箱不能正常登錄規範化所以他們已檢舉爲「壞」,其分別對應不同。默認行爲是不在這些像素上繪製任何東西。您還可以指定繪製超過或低於顏色貼圖限制的像素的顏色(默認情況下將其繪製爲最高/最低顏色)。

-1

這是用matplotlib hist2d函數生成的嗎?

所有你需要做的就是去通過矩陣並設置一些任意的本底值,然後確保有固定的限制繪製該

for f in hist2d: 
    f += 1e-3 

那麼當你展示圖中,所有的空白將現達到最低值,並顯示在對數正態圖上。但是,如果您讓hist2d自動爲您選擇縮放比例,則需要使用1e-3樓層值作爲最小值。爲避免這種情況,需要在hist2d中設置vmin和vmax值

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)