2011-08-08 200 views

回答

167

實際上,這很容易:您可以使用bin界限給出一個列表,而不是bin的數量。它們可以分佈不均,太:

plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100]) 

如果你只是希望他們平均分配,你可以簡單的使用範圍:

plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth)) 

添加到原來的答案

的以上線路僅適用於填充整數的data。正如macrocosme指出,對於浮子可以使用:

import numpy as np 
plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth)) 
+8

請注意,最後一行僅適用於整數,而不是浮點數。 – Gabriel

+12

用np.arange(...)替換範圍(...)以使其與浮動一起工作。 – macrocosme

+0

附加問題,我該如何鑽出軸來查看每個垃圾箱的值?現在我只能看到'10..20..30..' – cqcn1991

4

我想簡單的方法是計算你的數據的最小值和最大值,然後計算L = max - min。然後你將L除以期望的紙箱寬度(我假設這是你的意思是紙箱尺寸),並使用這個值的上限作爲箱的數量。

+0

這正是我想到的,謝謝。只是想知道是否有一個更簡單的方法,但這似乎找到感謝! –

+0

使用圓形數字我沒有用這種方法得到圓形的圓形大小。任何人都經歷過這個? –

13

對於N個頻點,箱體邊緣由N + 1的值的列表中指定其中第一N得到下層紙槽邊緣和1給出了上最後一個箱子的邊緣。

代碼:

from numpy import np; from pylab import * 

bin_size = 0.1; min_edge = 0; max_edge = 2.5 
N = (max_edge-min_edge)/bin_size; Nplus1 = N + 1 
bin_list = np.linspace(min_edge, max_edge, Nplus1) 

注意linspace從min_edge產生陣列max_edge分成N + 1點的值或N個頻點

+0

請注意,箱箱包含其下限且不包括其上限,但N + 1(最後一個)箱櫃除外,其中包含兩個邊界。 – lukewitmer

4

我有同樣的問題,因爲OP(我想!),但我無法按照Lastalda指定的方式工作。我不知道我是否正確解釋了這個問題,但是我找到了另一種解決方案(儘管這樣做可能是一種非常糟糕的方式)。

這是我所採取的方式:

plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);

它創建這樣的:

image showing histogram graph created in matplotlib

所以第一個基本參數 '初始化' 倉 - 我特別創建一個在我設置在箱參數中的範圍之間的數字。

爲了演示這個,看看第一個參數([1,11,21,31,41])中的數組和第二個參數中的'bin'數組([0,10,20,30,40 ,50]):

  • 數1(來自第一陣列)落在0之間和10( '箱' 陣列中)
  • 11的數量(來自第一陣列)11和20之間落入(在'箱'陣列中)
  • 數字21(來自第一個陣列)落在21和30之間(在「箱」陣列中)等等

然後我使用'權重'參數來定義每個bin的大小。這是用於權重參數的數組:[10,1,40,33,6]。

所以0-10倉被賦予值10,11到20箱被給予值1,21〜30箱中給出的40的值等

+0

我認爲你對直方圖函數的工作原理有一個基本的誤解。它期望原始數據。因此,在您的示例中,您的數據數組應該包含介於10和20之間的10和10之間的10個值,依此類推。然後該功能進行總結和繪圖。上面的操作是一種解決方法,因爲您已經有了總和(然後通過濫用「權重」選項將其插入到圖表中)。 希望這會消除一些混亂。 – Lastalda

0

對於具有直方圖整數x值我結束了使用

plt.hist(data, np.arange(min(data)-0.5, max(data)+0.5)) 
plt.xticks(range(min(data), max(data))) 

0.5的偏移量中心在x軸值的bin。 plt.xticks調用爲每個整數添加一個記號。