【问题标题】:How do I bin and categorize numbers in Python?如何在 Python 中对数字进行分类和分类?
【发布时间】:2015-01-23 00:00:57
【问题描述】:

我不确定分箱是否是正确的术语,但我想为我正在从事的项目实施以下内容:

我有一个数组或者一个描述边界和/或区域的字典,例如:

boundaries = OrderedDict([(10,'red'),(20,'blue'),(55,'purple')])

这些区域的索引从 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 函数已经完成了我正在尝试做的事情?如果代码又短又快,那就太好了。这不是为了任何形式的任务(这是为了我的一个小实验/数据项目),所以我不想在这里重新发明轮子。

【问题讨论】:

  • 这不是您要问的,但您正在使用常规字典定义OrderedDict,因此不一定会保留顺序。相反,使用元组列表定义它:OrderedDict([(10, "red"), (20, "blue"), (55, "purple")])
  • 感谢并更正。

标签: python numpy matplotlib plot scipy


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2020-11-03
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多