Python log space 中的直方图,其中一个 bin 以特定值为中心
Python histogram in log space with one bin centered at a specific value
我正在尝试在 matplotlib 中创建满足一些特定要求但遇到问题的直方图。它需要做什么:
- 两个轴都需要对数space
- log space.
中的 bin 大小需要统一
- 每个 dex 需要恰好有五个 bin(数量级)
- 三个 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()
我正在尝试在 matplotlib 中创建满足一些特定要求但遇到问题的直方图。它需要做什么:
- 两个轴都需要对数space
- log space. 中的 bin 大小需要统一
- 每个 dex 需要恰好有五个 bin(数量级)
- 三个 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()