直方图中值的频率
Frequencies of values in histogram
这是我的第一个post,所以请多多包涵
这是代码
plt.figure()
ax1 = plt.subplot()
sample = np.random.normal(loc=0.0, scale=1.0, size=100)
ax1.hist(sample,bins=100)
ax1.set_title('n={}'.format(sample_size))
print(len(np.unique(sample))) ##outputs 100 as expected
我的疑问是如果我给出 bins=100
并且样本数也是 100,那么为什么它不为每个样本绘制条形图以及为什么输出图包含大于 1 的频率?
使用默认参数,所有 bin 的宽度都相同。 100 个 bin 表示每个 bin 的宽度是总宽度的 1/100。总宽度从样本列表的最小到最大。
由于边界的选择,至少有一个点会出现在第一个 bin 中,一个会出现在最后一个 bin 中,但大多数会出现在中央 bin 中,而许多最外面的 bin 会保持为空。
通常希望所有箱子的宽度都相同。直方图想要显示在哪个区域有更多的样本和更少的样本,无论是只有一个峰值还是多个峰值。通常,为了传达有关数据的有趣信息,bin 的数量应远少于样本的数量。
这里有一个情节来说明正在发生的事情。由于 100 个 bin 会创建一个非常拥挤的图,因此该示例仅使用 20 个样本和 20 个 bin。样本太少,它们会比更多样本分散得更多。 hist
returns 3 个数组:一个包含每个 bin 的内容,一个包含 bin 之间的边界(这比 bin 的数量多一个),一个包含图形对象(矩形块)。边界可以用来显示它们的位置。
import matplotlib.pyplot as plt
import numpy as np
N = 20
plt.figure()
ax1 = plt.subplot()
sample = np.random.normal(loc=0.0, scale=1.0, size=N)
bin_values, bin_bounds, _ = ax1.hist(sample, bins=N, label='Histogram')
ax1.set_title(f'{len(np.unique(sample))} samples')
ax1.plot(np.repeat(bin_bounds, 3), np.tile([0, -1, np.nan], len(bin_bounds)), label='Bin boundaries' )
ax1.scatter(sample, np.full_like(sample, -0.5), facecolor='none', edgecolor='crimson', label='Sample values')
ax1.axhline(0, color='black')
plt.legend()
plt.show()
这是 100 个样本和 100 个 bin 的样子:
这是我的第一个post,所以请多多包涵
这是代码
plt.figure()
ax1 = plt.subplot()
sample = np.random.normal(loc=0.0, scale=1.0, size=100)
ax1.hist(sample,bins=100)
ax1.set_title('n={}'.format(sample_size))
print(len(np.unique(sample))) ##outputs 100 as expected
我的疑问是如果我给出 bins=100
并且样本数也是 100,那么为什么它不为每个样本绘制条形图以及为什么输出图包含大于 1 的频率?
使用默认参数,所有 bin 的宽度都相同。 100 个 bin 表示每个 bin 的宽度是总宽度的 1/100。总宽度从样本列表的最小到最大。
由于边界的选择,至少有一个点会出现在第一个 bin 中,一个会出现在最后一个 bin 中,但大多数会出现在中央 bin 中,而许多最外面的 bin 会保持为空。
通常希望所有箱子的宽度都相同。直方图想要显示在哪个区域有更多的样本和更少的样本,无论是只有一个峰值还是多个峰值。通常,为了传达有关数据的有趣信息,bin 的数量应远少于样本的数量。
这里有一个情节来说明正在发生的事情。由于 100 个 bin 会创建一个非常拥挤的图,因此该示例仅使用 20 个样本和 20 个 bin。样本太少,它们会比更多样本分散得更多。 hist
returns 3 个数组:一个包含每个 bin 的内容,一个包含 bin 之间的边界(这比 bin 的数量多一个),一个包含图形对象(矩形块)。边界可以用来显示它们的位置。
import matplotlib.pyplot as plt
import numpy as np
N = 20
plt.figure()
ax1 = plt.subplot()
sample = np.random.normal(loc=0.0, scale=1.0, size=N)
bin_values, bin_bounds, _ = ax1.hist(sample, bins=N, label='Histogram')
ax1.set_title(f'{len(np.unique(sample))} samples')
ax1.plot(np.repeat(bin_bounds, 3), np.tile([0, -1, np.nan], len(bin_bounds)), label='Bin boundaries' )
ax1.scatter(sample, np.full_like(sample, -0.5), facecolor='none', edgecolor='crimson', label='Sample values')
ax1.axhline(0, color='black')
plt.legend()
plt.show()
这是 100 个样本和 100 个 bin 的样子: