以下代码生成一个只有两个 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()
答案 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))