2016-03-09 77 views
3

添加一個小酒吧,我認爲可能HIST功能有一些問題,在某些情況下,當我繪製與matplotlib的直方圖:Matplotlib直方圖的第二直方圖倉

pylab.figure() 
H, bins, _ = pylab.hist([2,2]) 
print H 
print bins 

結果是:

histogram

[ 0. 0. 0. 0. 0. 2. 0. 0. 0. 0.] 
[ 1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5] 

你在情節1.5和1.6之間的「凸點」的,它是從哪裏過來看?我怎樣才能避免它?

+0

如果你寫了''np.sum((ar <2))'',返回結果是什麼? – MSeifert

+0

我回來了一個0. –

+2

你可以編輯數組或至少同樣多的數組到問題中,以便它仍然顯示0這個「凹凸」?儘量讓它儘可能小。 :) – MSeifert

回答

0

這很有趣。

你可以看一下產生的矩形:

ax = plt.subplot(111) 
h, bins, rects = ax.hist([2, 2]) 

for r in rects: 
    print(r.get_bbox()) 

# Bbox(x0=1.5, y0=0.0, x1=1.6, y1=0.0) 
# Bbox(x0=1.6, y0=0.0, x1=1.7, y1=0.0) 
# Bbox(x0=1.7, y0=0.0, x1=1.8, y1=0.0) 
# Bbox(x0=1.8000000000000003, y0=0.0, x1=1.9000000000000001, y1=0.0) 
# Bbox(x0=1.9, y0=0.0, x1=2.0, y1=0.0) 
# Bbox(x0=1.9999999999999998, y0=0.0, x1=2.0999999999999996, y1=2.0) 
# Bbox(x0=2.1000000000000005, y0=0.0, x1=2.2000000000000006, y1=0.0) 
# Bbox(x0=2.2, y0=0.0, x1=2.3, y1=0.0) 
# Bbox(x0=2.3, y0=0.0, x1=2.4, y1=0.0) 
# Bbox(x0=2.4000000000000004, y0=0.0, x1=2.5000000000000004, y1=0.0) 

顯然,直方圖功能,爲每個箱子,連空的矩形。雖然它們的高度爲0,但它們會傳遞給渲染器,並且在某些情況下會繪製虛假的東西。

我不知道如何防止這種情況。但是,有一個解決方案,但它是相當黑客。 hist函數爲每個容器放置一個矩形色塊。它可以手動遍歷這些補丁,並刪除那些具有零高度:

ax = plt.subplot(111) 
h, bins, rects = ax.hist([2, 2]) 

ax.patches = [p for p in ax.patches if p.get_height() > 0] 
+0

這真的很有趣!但我會提供一個不太冒險的解決方案... –

+0

是的,我也會......如果沒有好的解決方法,可能會被認爲是matplotlib中的一個錯誤。 – kazemakase

+0

讓我們等待幾天,否則我會報告給matplotlit –

0

這似乎是一個呈現的問題。將圖保存爲pdf不會顯示一瞥。所以,根據你對這個數字的最終使用情況,這可能不會成爲一個問題。

+0

在我的情況下,我更喜歡jupyter筆記本可以相信它... –