将列表自动分成箱子,以供直方图绘制

2024-04-24 08:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Matplot绘制一个数字列表作为直方图,x轴显示箱子,y轴显示每个箱子包含多少值(不是数字的总和)。我的目标是根据列表中的数据自动生成每个箱子中包含的数字间隔。你知道吗

例如,如果这是一个列表:[1,3,8,9,9,4,20,3,10,24,80,2,45,2100,25],那么我认为有4个箱子是有意义的,比如1-10,10-20,20-50,50+。例如。如果列表看起来不同,数字范围更广,可能6个箱子更好,每个箱子中的数字间隔可能更大。你知道吗

我怎么能这么做?我怀疑numpy或Pandas可能会这样做,但我是数据可视化领域的初学者,所以我自己还没有弄清楚。你知道吗

下面是我目前用于手动装箱的非常原始的代码(然后我将其交给Matplot)。我知道我可以用更好的Python代码来缩短它,但是我怀疑像这样手动装箱并不是最好的方法。你知道吗

# example values, list with time stamps in minutes
list_with_minutes =  [1,3,8,9,9,4,20,3,10,24,80,2,45,2,100,25]


bin1 = 0
bin2 = 0
bin3 = 0
bin4 = 0
bin5 = 0
bin6 = 0
bin7 = 0

for value in list_with_minutes:
    if value <= 5:
        bin1 += 1
    if value >= 6 and value <= 10:
        bin2 += 1
    if value >= 11 and value <= 30:
        bin3 += 1
    if value >= 31 and value <= 60:
        bin4 += 1
    if value >= 61 and value <= 120:
        bin5 += 1
    if value >= 121 and value <= 240:
        bin6 += 1
    if value >= 241:
        bin7 += 1

minute_bins = [1,2,3,4,5,6,7]
number_of_posts_list = [bin1,bin2,bin3,bin4,bin5,bin6,bin7]

谢谢。你知道吗

编辑,因为这个问题被认为是一个可能的模棱两可的问题:我的问题不是“直方图通常如何工作”,而是如何根据数字的范围、字符和数量以某种自动化的方式存储一个数字列表。你知道吗


Tags: and列表ifvaluewith数字listminutes
1条回答
网友
1楼 · 发布于 2024-04-24 08:25:01

如果我理解正确的话,你是想实现你自己的任意间隔箱边界装箱。如果是这样的话,这样的事情应该对你有帮助

from collections import defaultdict

list_with_minutes = [1, 3, 8, 9, 9, 4, 20, 3, 10, 24, 80, 2, 45, 2, 100, 25]
bin_boundaries = [(0, 10),
                  (10, 20),
                  (20, 50),
                  (50, max(list_with_minutes))]
bin_counts = defaultdict(int)

for value in list_with_minutes:
    for low, high in bin_boundaries:
        if low < value <= high:
            bin_counts[(low, high)] += 1

print(bin_counts)
# defaultdict(<type 'int'>, {(50, 100): 2, (20, 50): 3, (0, 10): 10, (10, 20): 1})
print(bin_counts[(0, 10)])              # 10
print(bin_counts[bin_boundaries[2]])    # 3

相关问题 更多 >