如何生成随机数的直方图?

时间:2017-02-03 12:23:31

标签: python matplotlib

我使用代码生成100个1到100之间的随机数:

def histogram():
    for x in range(100):
        x = random.randint(1, 100)
        print(x)

现在我试图在直方图中表示这些信息,我将matplotlib.pyplot导入为plt并试图构建它,但我似乎遇到了问题。

我试过了:

def histogram():
    for x in range(100):
        x = random.randint(1, 100)
        return x       
    histogram_plot = histogram()
    plt.hist(histogram_plot)
    plt.show()

我也试过了:

def histogram():
    for x in range(100):
        x = random.randint(1, 100)
        print(x)
        plt.hist(x)
        plt.show()

我做错了什么?

2 个答案:

答案 0 :(得分:3)

这是一个与您的代码类似的小工作示例

>>> import matplotlib.pyplot as plt
>>> import random
>>> data = [random.randint(1, 100) for _ in range(100)]
>>> plt.hist(data)
(array([ 15.,  13.,   9.,   9.,  11.,   9.,   9.,  11.,   6.,   8.]),
 array([   1. ,   10.9,   20.8,   30.7,   40.6,   50.5,   60.4,   70.3,   80.2,   90.1,  100. ]),
 <a list of 10 Patch objects>)
>>> plt.show()

enter image description here

您遇到的问题出在histogram函数中。您每次迭代都会将变量x重新分配给随机int,而不是构建list个随机值。

答案 1 :(得分:1)

在第一个函数中,你在循环中return,因此结果永远不会被绘制,因为解释器永远不会到达绘图代码。在第二个示例中,您将迭代并每次绘制单个实例。

只需创建一个随机数列表并绘制它们:

def histogram():
    xs = [random.randint(1, 100) for _ in range(100)]
    print(x)
    plt.hist(xs)
    plt.show()