我生成了 3 组数据,这些数据以 numpy 数组的形式组织。我有兴趣将这三组数据的概率分布绘制为标准化直方图。所有三个分布看起来应该几乎相同,因此将所有三个分布绘制在同一轴上以便于比较似乎是明智的。
默认情况下,matplotlib 直方图被绘制为条形图,这使得我想要的图像看起来非常困惑。因此,我的问题是是否有可能强制 pyplot.hist 只绘制一个框/圆/三角形,其中条形图的顶部将采用默认形式,以便我可以在同一个图表上清楚地显示所有三个分布,或者我是否必须计算直方图数据,然后将其单独绘制为散点图。
提前致谢。
最佳答案
有两种方法可以同时绘制三个直方图,但这两种方法都不是您所要求的。要执行您的要求,您必须计算直方图,例如通过使用 numpy.histogram
,然后使用 plot
方法绘制。仅当您想通过设置每个点的大小将其他信息与您的点相关联时,才使用 scatter
。
使用 hist
的第一种替代方法是将所有三个数据集同时传递给 hist
方法。 hist
方法然后调整每个条的宽度和位置,以便清楚地显示所有三组。
第二种选择是使用 histtype='step'
选项,它可以为每个集合绘制清晰的图。
这是一个演示这个的脚本:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(101)
a = np.random.normal(size=1000)
b = np.random.normal(size=1000)
c = np.random.normal(size=1000)
common_params = dict(bins=20,
range=(-5, 5),
normed=True)
plt.subplots_adjust(hspace=.4)
plt.subplot(311)
plt.title('Default')
plt.hist(a, **common_params)
plt.hist(b, **common_params)
plt.hist(c, **common_params)
plt.subplot(312)
plt.title('Skinny shift - 3 at a time')
plt.hist((a, b, c), **common_params)
plt.subplot(313)
common_params['histtype'] = 'step'
plt.title('With steps')
plt.hist(a, **common_params)
plt.hist(b, **common_params)
plt.hist(c, **common_params)
plt.savefig('3hist.png')
plt.show()
这是结果图:
请记住,您也可以使用面向对象的界面来完成所有这些操作,例如制作单独的子图等。
关于python - 以清晰的方式在 1 个轴上显示 3 个直方图 - matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497524/