python - 以清晰的方式在 1 个轴上显示 3 个直方图 - matplotlib

标签 python matplotlib

我生成了 3 组数据,这些数据以 numpy 数组的形式组织。我有兴趣将这三组数据的概率分布绘制为标准化直方图。所有三个分布看起来应该几乎相同,因此将所有三个分布绘制在同一轴上以便于比较似乎是明智的。

默认情况下,matplotlib 直方图被绘制为条形图,这使得我想要的图像看起来非常困惑。因此,我的问题是是否有可能强制 pyplot.hist 只绘制一个框/圆/三角形,其中条形图的顶部将采用默认形式,以便我可以在同一个图表上清楚地显示所有三个分布,或者我是否必须计算直方图数据,然后将其单独绘制为散点图。

提前致谢。

最佳答案

有两种方法可以同时绘制三个直方图,但这两种方法都不是您所要求的。要执行您的要求,您必须计算直方图,例如通过使用 numpy.histogram ,然后使用 plot 方法绘制。仅当您想通过设置每个点的大小将其他信息与您的点相关联时,才使用 scatter

使用 hist 的第一种替代方法是将所有三个数据集同时传递给 hist 方法。 hist 方法然后调整每个条的宽度和位置,以便清楚地显示所有三组。

第二种选择是使用 histt​​ype='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()

这是结果图:

enter image description here

请记住,您也可以使用面向对象的界面来完成所有这些操作,例如制作单独的子图等。

关于python - 以清晰的方式在 1 个轴上显示 3 个直方图 - matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497524/

相关文章:

Python-OBD模块对象没有属性 "OBD"

python - 是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?

python - Flask 和 Python 如何为 mysql 数据库中的数据制作搜索引擎

c# - Matplotlib savefig to BytesIO 是不是有点不对?

python - 在 2d 绘图上投影 3d 曲面

python - 具有可点击和可选择点的 PyQt4 散点图

python - Anaconda2导入错误: No module named matplotlib. pylab

python - matplotlib 只能更新最新的点到图中吗?

python - _mysql_exceptions.ProgrammingError - 如何处理?

python - 使用python的二进制文件中的EOF