【问题标题】:Drawing average line in histogram (matplotlib)在直方图中绘制平均线(matplotlib)
【发布时间】:2013-04-17 08:27:12
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: python matplotlib axis


    【解决方案1】:

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

    结果:

    【讨论】:

    • 水平线(或直方图)的等价物是什么?
    【解决方案2】:

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

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

    这会产生以下结果:

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 不以简洁的方式回答问题。此外,不直接提供有关问题的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2021-01-16
      • 2019-06-09
      • 2021-03-25
      • 1970-01-01
      相关资源
      最近更新 更多