【问题标题】:Both logarithmic scale hist axes两个对数刻度 hist 轴
【发布时间】:2020-04-28 18:41:31
【问题描述】:

我需要使用 Matplotlib 绘制 loglog 直方图(bot x 和 y 以 log10 比例),但以下代码未显示我想要的输出:

import matplotlib.pyplot as plt
import numpy as np
fig, ax1 = plt.subplots()
# suppose to have an array x
ax1.hist(x, ec='white', color="red")
plt.xscale("log")
plt.yscale("log")
plt.show()

我想要的输出是一个直方图,其中 x=np.log10(x) 和等效 y=np.log10(y),其中 y 中的每个元素是每个 bin 的高度。我什至尝试使用条形图,但我无法解决重叠箱的问题:

   import matplotlib.pyplot as plt
    import numpy as np
    frequency_dict = Counter(x)
    new_x = list(frequency_dict.keys())
    y = list(frequency_dict.values())
    ax1.bar(np.log10(new_x), np.log10(y), ec='white', color="red")
    plt.show()

【问题讨论】:

    标签: python matplotlib histogram loglog


    【解决方案1】:

    您可以创建在日志空间中均匀分布的 bin。可以使用np.logspace(min, max, num_bins) 计算这些 bin 边界。

    from matplotlib import pyplot as plt
    import numpy as np
    
    x = np.abs(np.random.normal(500, 200, 1000))
    assert x.min() > 0, "all values need to be positive for log scale"
    
    plt.hist(x, bins=np.logspace(np.log10(x.min()), np.log10(x.max()), 15), ec='white', color="red")
    plt.loglog()
    
    plt.show()
    

    左侧是线性轴的直方图,右侧是对数轴的直方图。两个直方图都使用对数样式的 bin。

    【讨论】:

      【解决方案2】:

      您可以在 hist 函数中使用“log = True”来设置对数刻度的 y 轴。您可以在创建直方图之前手动记录 x 数据。所以这是一个展示如何做到这一点的例子。我希望这就是您正在寻找的。​​p>

      import matplotlib.pyplot as plt
      import numpy as np
      
      # Simulate a normally distributed dataset
      x = np.random.normal(loc = 500, scale = 200, size = 100)
      
      fig, ax = plt.subplots(ncols = 2, figsize=(12,3))
      ax[0].hist(x, ec='white', color="red", log = False)
      ax[0].set_xlabel('x')
      ax[0].set_ylabel('Freq counts')
      
      ax[1].hist(np.log10(x), ec='white', color="red", log = True)
      ax[1].set_xlabel('log10(x)')
      ax[1].set_ylabel('Freq counts in log scale')
      
      plt.show()
      

      导致

      【讨论】:

      • 我还需要 y 轴为对数,例如 20 将显示为 log10(20) = 1.3010299957
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 2011-03-28
      • 2016-11-05
      相关资源
      最近更新 更多