【问题标题】:Histogram matplotlib from arrays来自数组的直方图 matplotlib
【发布时间】:2012-01-23 03:00:30
【问题描述】:

我有两个数组:

例如:

a=[1, 2, 3, 4]

b=[10, 20, 30, 40]

从我需要绘制直方图的那些数字中,我知道用 (1,10)、(2, 20) 等坐标绘制曲线很容易。但是如何从数组中绘制直方图。目前我坚持选择绘制直方图。任何建议都会很好。

import matplotlib.pyplot as plt
import numpy as np

a = [([97, 99, 99, 96, 97, 98, 99, 97, 99, 99, 96, 97, 99, 99, 95,
       98, 99, 97, 97, 98, 97, 96, 98, 98, 98, 98, 98, 98, 96, 98, 98, 98, 98,
       98, 98, 96, 97, 97, 97, 97, 97, 96, 96, 97, 97, 96, 95, 97, 96, 97, 96, 97,
       96, 95, 96, 97, 95, 95, 93, 93, 92, 93, 93, 95, 95, 94, 93, 94, 94, 95, 95, 95,
       95, 96, 96, 95, 96, 96, 96, 96, 94, 95, 90, 95, 95, 95, 95,
       95, 88, 94, 94, 93, 95, 95, 94, 95, 95, 95, 95, 95, 93],)]

for item in a[0]:
    s = item

lengths = len(s)
s2 = [s[x:x+9] for x in xrange(0, len(s), 9)]
print s2.index(min(s2))

test = 2400+int(lengths)
xaxis=range(2400,test)
yaxis=s

下面是图像示例 x 轴是 2400-2500 的值,y 轴是某种数组的值。

【问题讨论】:

    标签: python arrays matplotlib


    【解决方案1】:

    您可以使用 matplotlib.pyplot.hist 在 matplotlib 中制作直方图。鉴于问题中的代码,您希望 a 中的值成为 2400 到 2500 中值的频率,这可能很简单:

    plt.hist(range(2400, 2501), weights=a[0][0])
    plt.show()
    

    这样做会从a 生成一个直方图,默认为 10 个 bin,如下所示。

    这里有一点奇怪,因为a 有 101 个值(意味着绘制的范围是 2400 到 2500,包括),所以最后一个 bin 获得了 11 个值的频率计数,而其他 bin 获得了频率计数十个值。您可以使用以下内容为每个值指定其自己的 bin。

    plt.hist(range(2400, 2501), weights=a[0][0], bins=101)
    plt.show()
    

    生成下面的图像。

    【讨论】:

    • 它显示但不是我真正需要的。我需要 x 轴是 2400 到 2500 和 y 轴的值(直方图的高度来自数组 a)。
    • 添加了图片的外观。
    猜你喜欢
    • 2017-10-15
    • 2014-01-24
    • 1970-01-01
    • 2011-07-16
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多