gpt4 book ai didi

python - matplotlib 直方图中的间隙 `hist`

转载 作者:行者123 更新时间:2023-12-05 05:09:18 31 4
gpt4 key购买 nike

我正在学习 Python 在线类(class)。这是代码,一字不差。它进行 100 次随机游动的蒙特卡罗重复,每次 10 步。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(123)
final_tails = []
for x in range(100) :
tails = [0]
for x in range(10) :
coin = np.random.randint(0, 2)
tails.append(tails[x] + coin)
final_tails.append(tails[-1])
plt.hist(final_tails, bins = 10)
plt.show()

类(class)说我应该得到没有间隙的情节。我得到完全相同的条形高度,顺序完全相同,但它们之间有一些奇怪的间距。

谁能证实或解释这个结果?

enter image description here enter image description here

我正在使用:

  • Python 3.7.1 64 位
  • Windows 7 64 位
  • 蜘蛛 3.3.2

谢谢。

尾注

我注意到,与类(class)的邻接条不同,我的 bin 边缘与整数对齐。这不好,因为数据将是整数,但整数是落在 bin 边缘的左侧还是右侧应该是一致的。因此,它似乎无法解释差距。然而,这可能意味着 bin 边缘的自动生成在 matplotlib 的发展过程中发生了变化。我不知道类(class)使用的是什么版本。

P.S. 下面说明问题是bin边缘没有跨越数据值范围内的所有整数:

print( np.unique( np.array( final_tails ) ) )
print( np.unique( final_tails ) ) # data values
hist, bin_edges = np.histogram( final_tails )
print(bin_edges) # bin edges
print(hist) # bar heights
  • 数据值为:[2 3 4 5 6 7 8 9]

  • bin 边缘是:[2. 2.7 3.4 4.1 4.8 5.5 6.2 6.9 7.6 8.3 9.]

  • 条形高度为:[ 2 10 23 0 21 27 0 10 6 1]

我使用以下方法获得了类(class)的漂亮邻接栏:

plt.hist( final_tails ,
bins = np.arange( min( final_tails ) - 0.5 ,
max( final_tails ) + 1.5 , 1.0 ) ,
edgecolor="k" )
plt.show()

我没有将此作为答案发布,因为归功于 saibhaskar和提供详细信息的 ImportanceOfBeingErnest。

但我确实想知道这是否需要自定义 bin 边缘是因为自动 bin 边缘的方案在创建类(class) Material 和现在。

最佳答案

您的数据的最小值和最大值分别为 2 和 9。将此范围除以 10 个 bin,意味着每个 bin 的宽度为 0.7。我们可以计算边,它们是 2、2.7、3.4、4.1、4.8 等。

print(min(final_tails), max(final_tails))
# 2 9
step = (max(final_tails)-min(final_tails))/10
print(step)
# 0.7
edges = np.linspace(min(final_tails), max(final_tails), 10+1)
print(edges)
# [2.0 2.7 3.4 4.1 4.8 5.5 6.2 6.9 7.6 8.3 9.0 ]

由于您的数据只是整数,例如在 4.1 和 4.8 之间的 bin 中,没有数据,因此图中缺少 bin 的条形图。

我怀疑您在类(class)中展示的图像是由与您在此处展示的不同的代码生成的。

关于python - matplotlib 直方图中的间隙 `hist`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57650834/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com