首页 > 解决方案 > 如何在直方图中使用浮点数作为 bin 大小?

问题描述

我有一个列表,我想在 Python 中使用 0.01 的 bin 大小制作直方图:

plt.hist(list, bins = 0.01)

我不断收到类型错误,说 bin 只能是整数、字符串或数组。无论如何在 Python 中使用浮点数作为 binsize 绘制直方图?

标签: pythonpython-3.xmatplotlibhistogram

解决方案


首先,尽量不要用具有特殊含义的词来命名变量。带有名称的变量list会阻止list在代码中进一步使用该命令。

bins=参数可以是单个数字,在这种情况下,它被解释为 bin 的数量。所以,它必须是一个严格的正整数。如果要设置特定的 bin 大小,则需要提供所需 bin 边缘的完整列表。最简单的方法使用np.arange(start, stop, step).

import matplotlib.pyplot as plt
import numpy as np

mylist = np.random.randn(1000) / 10
plt.hist(mylist, bins=np.arange(min(mylist), max(mylist)+0.01, step=0.01), color='turquoise')

示例图

如果最小值不是一个很好的整数,np.arange将遵循该模式。要获得 bin 边缘的“好”值,您可以startnp.arange. 例如:

import matplotlib.pyplot as plt
import numpy as np

mylist = np.random.randn(10, 1000).cumsum(axis=1).ravel() / 500
step = 0.01
start = np.floor(min(mylist) / step) * step
stop = max(mylist) + step
bin_edges = np.arange(start, stop, step=step)
plt.hist(mylist, bins=bin_edges, color='crimson', ec='white')
plt.xticks(bin_edges, rotation=90)
plt.tight_layout()
plt.show()

圆形垃圾箱边缘

PS:请注意,seabornsns.histplot支持的参数不仅仅是 matplotlib 的plt.histsns.histplot可以选择 abinwidth和/或 a binrange,但也可以选择不同类型的统计信息。


推荐阅读