Python Matplotlib图公平模具柱状图

Python Matplotlib图公平模具柱状图,python,python-3.x,matplotlib,histogram,Python,Python 3.x,Matplotlib,Histogram,我试图显示一个掷骰子概率密度的柱状图。基本上应该有6根钢筋,每个钢筋的高度为1/6,间距相等。我试过这个: fair = np.array([1, 2, 3, 4, 5, 6]*100) plt.hist(fair, density=True, label='Fair Die') plt.show() 我也试过这个 plt.hist(fair, bins=11, density=True, label='Fair Die', align='mid') 但它似乎不起作用。我不明白为什么hist

我试图显示一个掷骰子概率密度的柱状图。基本上应该有6根钢筋,每个钢筋的高度为1/6,间距相等。我试过这个:

fair = np.array([1, 2, 3, 4, 5, 6]*100)
plt.hist(fair, density=True, label='Fair Die')
plt.show()
我也试过这个

plt.hist(fair, bins=11, density=True, label='Fair Die', align='mid')

但它似乎不起作用。我不明白为什么hist命令在默认情况下不能生成正确的直方图,它是一个如此简单的直方图。

这里的问题是箱子

您希望避免将任何两个(或更多)值组合在一起,否则密度将是1/6的倍数

以下是如何正确设置垃圾箱:

fair = np.array([1, 2, 3, 4, 5, 6]*100)
plt.hist(fair, density=True, bins=[1,2,3,4,5,6,7], label='Fair Die', rwidth=0.9, align='left')  # rwidth is optional
plt.show()
发件人:

垃圾箱:阵列

垃圾箱的边缘。长度nbins+1(nbins最后一个箱子的左边缘和右边缘)。即使传入多个数据集,也始终使用单个数组

注意:如果要显示标签,请在
plt.show()
之前调用
plt.legend()

注2:在这种情况下,建议设置
rwidth
看看评论,看看这是如何让人困惑的:P

或者,您可以在条形图周围绘制边框:

plt.hist(fair, density=True, bins=range(1,8), label='Fair Die', edgecolor='white', linewidth=1.2)

奖金:

如果您想拥有一个:


我认为条形图在这里更容易些,
*100
的相关性是什么?我不认为有必要这样做,也没有特别的相关性。这是因为我的总体目标是创建一些重要抽样图,使用一个公平的模具来估计偏差模具的平均值。也许我可以把它去掉100@Euler_Salter或者展示一个真正的概率死亡:请看我答案中的奖励部分。在你发布答案之前,一定要尝试你的代码。你自己先看看情节,我想说的是似乎不起作用,我基本上得到了一个大的垂直barDoes你的代码生成了什么图形?它看起来像6个单独的条形图,甚至接近柱状图吗?我没有投反对票。我的观点是,这些条是不可见的,你应该使用你现在使用的宽度。无论如何,我会向上投票,这样你仍然不会认为我向下投票哦,好的,你需要使用align='left'可以将它们与中间的标签对齐吗?我尝试了align=mid,这有点有效,但是它在左边留下了一个奇怪的空格。使用align='left'仍然在左边留下一个奇怪的空格,而且标签是错误的,骰子不能掷0。你需要玩代码才能得到你想要的。我编辑代码是为了完整,但这不是一个好的实践。
fair_proba = np.random.random_integers(1,6, 1000) 
In [10]: fair = np.array([1, 2, 3, 4, 5, 6]*100)
    ...: bins = np.array([i/2 for i in range(-1, 14)])
    ...: plt.hist(fair, bins=bins, label='Fair Die', align='left')
    ...: plt.xlim([0, 7])
    ...: plt.show()