gpt4 book ai didi

matplotlib - 在 Matplotlib 直方图中定义 bin 宽度/x Axis 刻度

转载 作者:行者123 更新时间:2023-12-05 09:24:30 24 4
gpt4 key购买 nike

我正在使用 matplotlib 生成直方图。

我需要箱子的宽度不等,因为我最感兴趣的是最低的箱子。现在我正在这样做:

plt.hist(hits_array, bins = (range(0,50,10) + range(50,550,50)))

这创建了我想要的东西(前 5 个 bin 的宽度为 10,其余为 50),但是前五个 bin 比后面的窄,因为所有 bin 都显示在同一 Axis 上.

有没有办法影响 x Axis 或直方图本身,以便我可以在前 5 个 bin 之后打破比例,以便所有 bin 都显示为同样宽度?

(我意识到这会产生扭曲的 View ,我对此没有意见,但我不介意 Axis 的两个不同比例部分之间有一点空间。)

任何帮助将不胜感激。谢谢!

最佳答案

我在这里有一个类似的问题,答案是使用肮脏的 hack。 Matplotlib histogram with collection bin for high values

因此,使用以下代码,您将得到丑陋的直方图。

def plot_histogram_04():
limit1, limit2 = 50, 550
binwidth1, binwidth2 = 10, 50
data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))

bins = range(0, limit1, binwidth1) + range(limit1, limit2, binwidth2)

plt.subplots(1, 1)
plt.hist(data, bins=bins)
plt.savefig('my_plot_04.png')
plt.close()

enter image description here

为了使 bins 等宽,你确实必须让它们等宽!这意味着要处理您的数据,使它们全部落入宽度相等的容器中,然后使用 xlabel。

def plot_histogram_05():
limit1, limit2 = 50, 550
binwidth1, binwidth2 = 10, 50

data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))

orig_bins = range(0, limit1, binwidth1) + range(limit1, limit2 + binwidth2, binwidth2)
data = [(i - limit1) / (binwidth2 / binwidth1) + limit1
if i >= limit1 else i for i in data]
bins = range(0, limit2 / (binwidth2 / binwidth1) + limit1, binwidth1)

_, ax = plt.subplots(1, 1)
plt.hist(data, bins=bins)

xlabels = np.array(orig_bins, dtype='|S3')
N_labels = len(xlabels)
print xlabels
print bins
plt.xlim([0, bins[-1]])
plt.xticks(binwidth1 * np.arange(N_labels))
ax.set_xticklabels(xlabels)

plt.savefig('my_plot_05.png')
plt.close()

enter image description here

关于matplotlib - 在 Matplotlib 直方图中定义 bin 宽度/x Axis 刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com