【问题标题】:How to have logarithmic bins in a Python histogram如何在 Python 直方图中有对数 bin
【发布时间】:2011-10-14 21:42:09
【问题描述】:

据我所知,直方图函数中的选项 Log=True 仅指 y 轴。

P.hist(d,bins=50,log=True,alpha=0.5,color='b',histtype='step')

我需要 bin 在 log10 中等距分布。有什么可以做到的吗?

【问题讨论】:

  • 如果这样做,您必须将每个 bin 中的计数除以 bin 宽度!

标签: python numpy matplotlib histogram


【解决方案1】:

以下代码说明了如何将bins='auto' 与对数刻度一起使用。

import numpy as np
import matplotlib.pyplot as plt

data = 10**np.random.normal(size=500)

_, bins = np.histogram(np.log10(data + 1), bins='auto')
plt.hist(data, bins=10**bins);
plt.gca().set_xscale("log")

【讨论】:

    【解决方案2】:

    最直接的方法是只计算限制的 log10,计算线性间隔的 bin,然后通过提高到 10 的幂来转换回来,如下所示:

    import pylab as pl
    import numpy as np
    
    data = np.random.normal(size=10000)
    
    MIN, MAX = .01, 10.0
    
    pl.figure()
    pl.hist(data, bins = 10 ** np.linspace(np.log10(MIN), np.log10(MAX), 50))
    pl.gca().set_xscale("log")
    pl.show()
    

    【讨论】:

      【解决方案3】:

      使用 logspace() 创建几何序列,并将其传递给 bins 参数。并将xaxis的比例设置为对数比例。

      import pylab as pl
      import numpy as np
      
      data = np.random.normal(size=10000)
      pl.hist(data, bins=np.logspace(np.log10(0.1),np.log10(1.0), 50))
      pl.gca().set_xscale("log")
      pl.show()
      

      【讨论】:

      • 请注意,np.logspace(0.1,1.0,...) 将创建从 10**0.110**1.0 的范围,而不是从 0.11.0 的范围
      • 应该是np.logspace(np.log10(0.1),np.log10(1.0),50)
      • 查看我的回答,了解如何使用 bins='auto'
      • @AndreHolzner @OrangeSherbet 可以使用np.geomspace 直接指定端点。
      • 请注意,照片与代码不匹配。 x 轴的范围应为 10**-1 到 10**0。
      【解决方案4】:

      除了上述内容之外,在 pandas 数据帧上执行此操作也可以:

      some_column_hist = dataframe['some_column'].plot(bins=np.logspace(-2, np.log10(max_value), 100), kind='hist', loglog=True, xlim=(0,max_value))
      

      我会提醒,标准化垃圾箱可能存在问题。每个 bin 都比前一个大,因此必须除以它的大小以在绘图之前标准化频率,而且似乎我的解决方案和 HYRY 的解决方案都没有考虑到这一点。

      来源:https://arxiv.org/pdf/cond-mat/0412004.pdf

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 2011-01-17
        • 1970-01-01
        • 2021-05-11
        • 2013-10-08
        • 2019-04-16
        • 2020-11-04
        • 2016-10-14
        • 1970-01-01
        相关资源
        最近更新 更多