绘制两个模具滚动总和的直方图

时间:2019-04-29 05:16:34

标签: python

到目前为止,我已经有了这段代码,但我不知道它是否能解决问题,但是我在11和12中得到的结果太多,重复10000次,该图应该是对称的。问题出在哪里?

import numpy as np
import matplotlib.pyplot as plt
def roll_dice(n):
    return [np.random.randint(1, 7) + np.random.randint(1, 7) for i in range(n)]

dices = roll_dice(10000)
plt.hist(dices)

3 个答案:

答案 0 :(得分:2)

我认为,当可视化变得更加明确时,事情会变得更加清晰。通过指定bin范围(bins=...),bin的对齐方式(align=...)并在直方图中显示条形图之间的间隙(rwidth=...),您可以更好地控制正在发生的事情。下面的代码与原始代码完全一样(尽管以一种稍微更优雅的方式):

N = int(1e5)
A = np.random.randint(low=1, high=7, size=N)
B = np.random.randint(low=1, high=7, size=N)
dice = A + B
plt.hist(dice, bins=np.arange(2, 14), align="left", rwidth=0.9)
plt.show()

结果:

enter image description here

答案 1 :(得分:1)

一切都很好。 :)这是分箱的讨厌产物。具体来说,尝试plt.hist(dices,bins=11)自己看看。 (无需自行设置,默认情况下使用十个档,因此历史记录中的最后一个档包括变量的值,分别对应于“ 11”和“ 12” ...)

通常,在使用直方图(以及该bins参数)时要格外小心,尤其是对于 integer 变量!

答案 2 :(得分:0)

您的代码工作正常,问题在于直方图功能的自动合并。 使用

plt.hist(dices, bins=11)

PS:欢迎使用stackoverflow!