87

我正在 python 中使用 matplotlib 绘制直方图,并想绘制一条表示数据集平均值的线,以虚线覆盖在直方图上(或者其他颜色也可以)。关于如何在直方图上绘制一条线的任何想法?

我正在使用 plot() 命令,但不确定如何绘制垂直线(即我应该为 y 轴指定什么值?

谢谢!

4

3 回答 3

155

您可以使用plotorvlines来绘制一条垂直线,但从 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>

结果: 阴谋

于 2013-04-23T23:56:00.653 回答
42

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

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()))

产生以下结果: 带文本的平均行

于 2018-10-24T04:41:52.270 回答
2

我会查看您的数据集中的最大值(即直方图 bin 值)将该值乘以大于 1 的数字(例如 1.5),然后使用它来定义 y 轴值。这样,无论直方图中的值如何,它都会出现在直方图上方。

于 2013-04-23T23:38:31.143 回答