考虑在 matplotlib 中具有多个直方图的图,如下所示:
#! /usr/bin/env python3
import matplotlib.pyplot as plt
import random
# Use the same seed for reproducibility.
random.seed(10586)
data1 = [random.gauss(1e-4, 3e-2) for _ in range(10**3)] + [0.3]
data2 = [random.gauss(1e-2, 3e-3) for _ in range(10**3)] + [0.4]
data3 = [0.2]
if __name__ == '__main__':
plt.xlim(xmin=0, xmax=0.8)
plt.yscale('log')
n1, bins1, patches1 = plt.hist(data1, bins='auto', alpha=0.6)
n2, bins2, patches2 = plt.hist(data2, bins='auto', alpha=0.6)
n3, bins3, patches3 = plt.hist(data3, bins='auto', alpha=0.6)
bin_options = ['auto', 'fd', 'doane', 'scott', 'rice', 'sturges', 'sqrt']
plt.show()
然而,第三个数据集只有一个数据点,所以当我们使用时,plt.hist(data3, bins='auto') 我们得到一个横跨 x 范围的长条,并且看不到它的值为 0.2:
(这在只有一个数据点时最为明显,但对于例如两个或三个数据点来说也是一个问题。)
避免这种情况的一种方法是重新使用另一个数据集的箱。例如,对于plt.hist(data3, bins=bins1)
,我们可以看到data3
就好了:
但是,如果我们通过 使用其他数据集bins=bins2
,则 bin 太窄,我们根本看不到data3
:
我们如何确保具有相对较少点的直方图可见,但仍能看到其在 x 轴上的值?
慕后森
相关分类