我在python中使用matplotlib绘制直方图,想画一条代表数据集平均值的线,覆盖在直方图上作为虚线(或者其他颜色也可以)。如何绘制一条覆盖在直方图上的线?我正在使用plot()命令,但不确定如何绘制垂直线(即,我应该为y轴给予什么值?谢谢!2谢谢!
63lcw9qa1#
你可以使用plot或vlines来画一条垂直线,但是要画一条从y轴的底部到顶部的垂直线,axvline可能是最简单的函数。下面是一个例子:
plot
vlines
axvline
In [80]: import numpy as npIn [81]: import matplotlib.pyplot as pltIn [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>
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>
结果:
rmbxnbpk2#
这是一个老主题,也是一个小补充,但我经常喜欢的一件事是在线条旁边绘制平均值:
import numpy as npimport matplotlib.pyplot as pltnp.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()))
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()))
结果如下:
uhry853o3#
我会查看数据集中的最大值(即直方图箱值),将该值乘以大于1的数字(例如1.5),并使用该值定义y轴值。这样,它将显示在直方图上方,而不管直方图中的值如何。
3条答案
按热度按时间63lcw9qa1#
你可以使用
plot
或vlines
来画一条垂直线,但是要画一条从y轴的底部到顶部的垂直线,axvline
可能是最简单的函数。下面是一个例子:结果:

rmbxnbpk2#
这是一个老主题,也是一个小补充,但我经常喜欢的一件事是在线条旁边绘制平均值:
结果如下:

uhry853o3#
我会查看数据集中的最大值(即直方图箱值),将该值乘以大于1的数字(例如1.5),并使用该值定义y轴值。这样,它将显示在直方图上方,而不管直方图中的值如何。