Python log space 中的直方图,其中一个 bin 以特定值为中心

Python histogram in log space with one bin centered at a specific value

我正在尝试在 matplotlib 中创建满足一些特定要求但遇到问题的直方图。它需要做什么:

  1. 两个轴都需要对数space
  2. log space.
  3. 中的 bin 大小需要统一
  4. 每个 dex 需要恰好有五个 bin(数量级)
  5. 三个 bin 需要居中 at/include 值 1、10 和 100。

我已经想出了 1-3,但找不到同时完成 4 的方法。这就是我正在做的事情。实际数据来自 pandas 数据框。此问题已更新以提供示例。

data = np.random.uniform(0.01,300,size=200)
dataframe = pd.DataFrame(data)

plt.figure()
plt.hist(dataframe[0],bins=np.logspace(np.log10(0.1),np.log10(1000),21),edgecolor='k',facecolor='None',align='mid')
plt.gca().set_xscale('log')
plt.gca().set_yscale('log')

这将是完美的,除了不满足 4。有人对如何协调这些要求有建议吗?非常感谢。

当前输出

这个的关键似乎是生成正确的 bin 边界,所以如果你添加一个额外的 bin 并将它们全部向左移动半个 bin,你就会得到这个。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = np.random.uniform(0.01, 300, size=200)
dataframe = pd.DataFrame(data)

plt.figure()
plt.hist(dataframe[0], bins=10.0 ** np.linspace(-1.1, 3.1, 22),
         edgecolor='k', facecolor='None', align='mid')
plt.gca().set_xscale('log')
plt.gca().set_yscale('log')
plt.show()