在直方图中绘制平均线

99
我正在使用Python中的Matplotlib绘制直方图,并希望在直方图上叠加一条表示数据集平均值的线,可以使用虚线(或其他颜色也可以)。有没有关于如何在直方图上叠加一条线的想法?
我正在使用plot()命令,但不确定如何绘制一条垂直线(即在y轴上应该给出什么值)?
谢谢!
3个回答

173

您可以使用plotvlines来绘制垂直线,但是要从y轴的底部画到顶部的垂直线,则axvline可能是最简单的函数。以下是一个示例:

In [80]: import numpy as np

In [81]: import matplotlib.pyplot as plt

In [82]: np.random.seed(6789)

In [83]: x = np.random.gamma(4, 0.5, 1000)

In [84]: result = plt.hist(x, bins=20, color='c', edgecolor='k', alpha=0.65)

In [85]: plt.axvline(x.mean(), color='k', linestyle='dashed', linewidth=1)
Out[85]: <matplotlib.lines.Line2D at 0x119758828>

结果: 图表


一个水平线(或柱状图)的等效物是什么? - D.L

61

这是一个老话题和次要的补充,但我经常喜欢在线条旁边绘制平均值:

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(6789)
x = np.random.gamma(4, 0.5, 1000)
result = plt.hist(x, bins=20, color='c', edgecolor='k', alpha=0.65)
plt.axvline(x.mean(), color='k', linestyle='dashed', linewidth=1)

min_ylim, max_ylim = plt.ylim()
plt.text(x.mean()*1.1, max_ylim*0.9, 'Mean: {:.2f}'.format(x.mean()))

会产生以下结果: 带有文本的平均线


2
我会查看你的数据集中最大的值(即直方图条形箱值),将该值乘以一个大于1的数字(比如说1.5),并使用该值来定义y轴值。这样,无论直方图内部的值如何,它都会出现在直方图上方。

1
没有简洁地回答问题,也没有直接提供有关问题的帮助。 - LonelySoul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接