2014-11-25 54 views
3

我不確定binning是否是正確的術語,但我想爲我正在處理的項目實現以下內容:如何在Python中對數字進行分類和分類?

例如,我有一個數組或描述邊界和/或區域的字典,例如:

邊界= OrderedDict([(10, '紅'),(20, '藍'),(55, '紫色')])

的區域索引爲0到100(例如)。我想將每個區域分成一個顏色(小於字典中的鍵),然後繪製它。例如,如果它小於10,則爲紅色。

到目前爲止,我有:

boundaries = OrderedDict([(10,'red'),(20,'blue'),(55,'purple')]) 
areas = range(0,101) 
binned = [] 
for area in areas: 
    for border in boundaries.keys(): 
     if area < border: 
      binned.append(boundaries[border]) 
      break 

另外,我需要找出一種方法來定義色彩,並找到一個包來繪製。所以,如果你有任何想法,我可以如何繪製一個二維彩色陰謀(實際項目將在二維)。也許matplotlib或PIL?我之前使用過matplotlib,但從未使用這種類型的數據。

另外,是否有一個scipy/numpy函數,已經做了我想要做的?如果代碼短而快,那將會很好。這不適用於任何類型的任務(這是我的一個小實驗/數據項目),所以我不想在這裏重新發明輪子。

在此先感謝您的任何建議/幫助。

+1

這不是你問的問題,而是你使用常規字典定義OrderedDict,所以順序不一定會保留。相反,使用元組列表來定義它:'OrderedDict([(10,「red」),(20,「blue」),(55,「purple」)])' – kindall 2014-11-25 04:51:55

+0

謝謝並更正。 – 2014-11-25 04:57:06

回答

1
import matplotlib.pyplot as plt 
boundaries = collections.OrderedDict([(10,'red'),(20,'blue'),(55,'purple')]) 
areas = range(0,101) 
n, bins, patches = plt.hist(areas, [0]+list(boundaries), histtype='bar', rwidth=1.0) 
for (patch,color) in zip(patches,boundaries.values()): 
    patch.set_color(color) 
plt.show() 
相關問題