我在这里有一个类似的问题,答案是使用肮脏的黑客。
Matplotlib 直方图与高值收集箱
因此,使用以下代码,您将获得已经拥有的丑陋直方图。
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()
为了使垃圾箱等宽,您确实必须使它们等宽!这意味着操纵您的数据,使它们都落在等宽的箱中,然后使用 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()