2014-11-25 56 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() 
相关问题