【问题标题】:Histogram issues between different column datasets不同列数据集之间的直方图问题
【发布时间】:2020-09-22 02:50:06
【问题描述】:

我有一个 CSV,我从中提取不同的数据列并将其读取到我正在创建直方图的函数中。我遇到的问题是,我的直方图对于一列中的数据是正确的,并且对于另一列中的数据没有显示正确的内容。例如,我有一个包含年龄的列,我的直方图在这方面效果很好,但我有另一列包含人口(与年龄相比更大的数字),直方图只显示列中的行数。当我打印 Numpy 数组时,它会打印出与年龄数据相同的内容。我可以看到两列之间的唯一区别,年龄列有超过 10k 行,而人口行有 558 行,人口数是 5-6 位,而年龄是 1-2 位。

年龄列(这些在直方图中起作用):

82
50
53
67
26
56
50
26
60
26
59
54
25
53
52
67
22
55
57
84
55
74
67
70
59
62
32

Populations Column(直方图表示 Population 列中值的数量)。

43191
73901
38247
98266
66781
62075
30444
96109
40497
37964
40822
40599
28360
24949
34969
49455
18128
34586
37489
48177
22061
35218
53745
97493
39764
16193
65818
53285

我的功能是:

def histogram(column_data):
    plt.title(col_name)
    df = column_data.to_numpy()
    af = df.reshape(-1)
    plt.hist(af)
    plt.show()

【问题讨论】:

    标签: python numpy matplotlib histogram


    【解决方案1】:

    有趣的行为。我也在第一次运行时看到了它(即没有情节)。一旦我在我的绘图命令中使用bins,问题就消失了。正如您所推测的那样,这可能与您的人口数据相对于引用的精度相对稀疏有关。

    import numpy as np
    import matplotlib.pyplot as p
    
    pop= [43191,73901,38247,98266,
    66781,62075,30444,96109,
    40497,37964,40822,40599,
    28360,24949,34969,49455,
    18128,34586,37489,48177,
    22061,35218,53745,97493,
    39764,16193,65818,53285]
    
    dat= np.random.rand(1000) # less sparse data
    
    p.figure (figsize=(10,3))
    
    p.subplot(131)
    p.hist(pop)
    p.subplot(132)
    p.hist(pop,bins=100);
    p.subplot(133)
    p.hist(dat, bins=100);
    

    【讨论】:

    • 我仍然遇到这个问题。我的图表仅在 x 轴上显示 0.0-3.0,在 y 轴上显示 0-250。我在图中确实有一些条形图,但它们都聚集在 0.0-0.3 附近,并且可能飙升至 275。数据输入与我在原始帖子中向您展示的数据相同。想法?
    • 我不确定,x 轴应该是 0..100k。您还可以将 bin 指定为列表而不是 bin 数量。如果您的数据与我从您的问题中复制的数据相同,那么 y 轴应该更小。您只列出了 28 个数据点。所以即使你有一个单独的垃圾箱,它也不能高于 28。
    • 检查你传递给 hist 的尺寸(形状)。它必须是单个列表,而不是 2D。 reshape(-1) 推断尺寸,因此您可能拥有与您认为的不同的东西。
    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2016-02-03
    • 2015-12-21
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多