Matplotlib 直方图箱包括/排除

时间:2021-03-02 12:50:39

标签: python matplotlib

以下代码生成一个只有两个 bin 的直方图。我希望是 3。

谁能解释一下我做错了什么?

import numpy as np
import matplotlib.pyplot as plt

data = [9, 10, 11]
binwidth = 1
bins = np.arange(min(data), max(data) + binwidth, binwidth)
print(bins)
plt.title("A Rich Man Walks into a Bar")
plt.hist(data, bins=bins)
plt.show()

enter image description here

1 个答案:

答案 0 :(得分:0)

bins 参数定义 bin 数量或 bin 边缘。如果您想创建一个包含 n 个 bin 的直方图,那么定义 bin 边缘的列表 bins 的大小为 n+1。所以在这里我们希望 bin 边缘为 [9, 10, 11, 12](if align='left';或 [8.5, 9.5, 10.5, 11.5] if align = 'mid')。

import matplotlib.pyplot as plt
import numpy as np

data = [9, 9, 11, 10, 9, 11, 11, 9]
width = 1
left, right = min(data), max(data) + width

# using 'bins' as the number of bins 
nbins = int((right - left) / width)
plt.hist(data, range=(left, right), bins=nbins, align="left")

# defining the sequence of bin edges
plt.hist(data, bins=np.arange(left, right + width, width), align="left")

# and without the alignment parameter
plt.hist(data, bins=np.arange(left, right + width, width) - width / 2)

# if 'data' only contains integers and 'width=1'
plt.bar(*np.unique(data, return_counts=True))