Python: выравнивание баров между краями бункера для двойной гистограммы

У меня возникли проблемы с использованием функции pyplot.hist для построения 2 гистограмм на том же рисунке. Для каждого интервала интернирования я хочу, чтобы 2 столбца были центрированы между бункерами (пользователь Python 3.6). Чтобы проиллюстрировать это, вот пример:

import numpy as np from matplotlib import pyplot as plt bin_width=1 A=10*np.random.random(100) B=10*np.random.random(100) bins=np.arange(0,np.round(max(A.max(),B.max())/bin_width)*bin_width+2*bin_width,bin_width) fig = plt.figure() ax = fig.add_subplot(111) ax.hist(A,bins,color='Orange',alpha=0.8,rwidth=0.4,align='mid',label='A') ax.hist(B,bins,color='Orange',alpha=0.8,rwidth=0.4,align='mid',label='B') ax.legend() ax.set_ylabel('Count') 

Я получаю это:

Histogram_1

Серия A и B перекрываются, что плохо. Зная, что существует только 3 варианта для «выравнивания» (в центре слева от левого бункера, из середины 2 бункеров, в центре справа), я не вижу других вариантов, кроме изменения бункеров, добавив:

 bins-=0.25*bin_width 

Перед построением A и добавлением:

 bins+=0.5*bin_width 

Перед построением В. Это дает мне: Гистограмма

Так-то лучше! Однако мне пришлось модифицировать биннинг, так что это не то же самое для A и B.

Я искал простой способ использования одних и тех же корзин, а затем смену 1-го и 2-го участков так, чтобы они были правильно отображены в интервалы биннинга, но я его не нашел. Любой совет?

Надеюсь, я четко объяснил свою проблему.

Как уже упоминалось в приведенном выше комментарии, вам не нужна функция графика гистограммы. Используйте функцию гистограммы numpy и нарисуйте ее результаты с помощью функции matplotlib.

Согласно подсчетам бункеров и количеству типов данных вы можете рассчитать ширину бункера. Клещи, которые вы можете настроить с помощью метода xticks:

 import numpy as np import matplotlib.pylab as plt A=10*np.random.random(100) B=10*np.random.random(100) bins=20 # calculate heights and bins for both lists ahist, abins = np.histogram(A, bins) bhist, bbins = np.histogram(B, abins) fig = plt.figure() ax = fig.add_subplot(111) # calc bin width for two lists w = (bbins[1] - bbins[0])/3. # plot bars ax.bar(abins[:-1]-w/2.,ahist,width=w,color='r') ax.bar(bbins[:-1]+w/2.,bhist,width=w,color='orange') # adjsut xticks plt.xticks(abins[:-1], np.arange(bins)) plt.show() 

введите описание изображения здесь