用Pylab绘制直方图

时间:2011-10-14 18:56:15

标签: python histogram matplotlib

使用Python 2.7。

我正在尝试为随机游走的50次贯穿所产生的数字绘制直方图。但是当我使用pylab.hist(batting_average,bins = 10)时,我得到一个奇怪的多色直方图,接近500,但只有50次行走,它应该可以在y上运行的最大值-axis将是50。

这是我的代码:

a = ['Hit', 'Out']
b = [.3, .7]


def battingAverage(atBats, some_list=a, probabilities=b):
    num_hits = 0
    num_outs = 0
    current_BA = []
    for i in range(1,atBats):
        if random_pick(a, b) == 'Hit':
            num_hits += 1
        else:
            num_outs +=1
        BA = float(num_hits)/(float(num_hits)+float(num_outs))
        current_BA.append(BA)
    return current_BA

def printBAs():
    for i in range(50):
        batting_average = battingAverage(501)
        pylab.hist(batting_average, bins=10)

我的直方图出了什么问题!?

如果有任何需要澄清的话,请告诉我,我会尽力而为。

1 个答案:

答案 0 :(得分:1)

传递给battingAverage的参数是501 ...并且是at-bats的数量。你正在做50个直方图,每个直方图有500个蝙蝠。

(哦,你需要修改代码的格式......压痕搞砸了。)

您的代码没有按照您的想法执行。

我认为你希望battingAverage能够返回最后的击球率,但是它会返回一个击球平均值列表,每个击球平均值一个。 然后你正在绘制该列表。

我想你想从battingAverage返回一个数字,你想在printBAs()函数中累积列表,并将pylab.hist移出for循环。

我不认为这是家庭作业?

换句话说,我认为你想要这样的东西:

a = ['Hit', 'Out']
b = [.3, .7]

def battingAverage(atBats, results=a, probabilities=b):
    num_hits = 0
    num_outs = 0
    for i in range(atBats):
        if random_pick(results, probabilities) == 'Hit':
            num_hits += 1
        else:
            num_outs +=1
    BA = float(num_hits)/(float(num_hits)+float(num_outs))
    return BA

def printBAs():
    batting_averages = [battingAverage(500) for i in range(50)]
    pylab.hist(batting_averages, bins=10)

虽然该代码仍需要清理......

相关问题