Matplotlib: Как сделать две гистограммы одинаковой ширины?
Я потратил некоторое время на поиск interwebs для ответа на этот вопрос, и я пробовал посмотреть на все SO для ответа тоже, но я думаю, что у меня нет правильной терминологии... Пожалуйста, извините меня, если это является дубликатом некоторой известной проблемы, я бы с радостью удалил свой пост и ссылаюсь на это сообщение вместо этого!
В любом случае, я пытаюсь построить две гистограммы на той же фигуре в Matplotlib. Мои два источника данных - это списки из 500 элементов. Чтобы представить иллюстрацию проблемы, с которой я столкнулся, см. Следующее изображение:
![Uneven histograms]()
Как вы можете видеть, гистограмма имеет неравномерные размеры бункера по умолчанию, хотя количество ящиков одинаковое. Я хотел бы гарантировать, что ширина бункера для обеих гистограмм одинакова. Есть ли способ сделать это?
Спасибо заранее!
Ответы
Ответ 1
Я думаю, что последовательный способ, который будет легко работать в большинстве случаев, без необходимости беспокоиться о том, какой диапазон распространения для каждого из ваших наборов данных, будет заключаться в объединении наборов данных в большой, определения краев бункеров, а затем сюжет:
a=np.random.random(100)*0.5 #a uniform distribution
b=1-np.random.normal(size=100)*0.1 #a normal distribution
bins=np.histogram(np.hstack((a,b)), bins=40)[1] #get the bin edges
plt.hist(a, bins)
plt.hist(b, bins)
![enter image description here]()
Ответ 2
Я думаю, вы можете использовать параметр диапазона вместе с параметром bin, чтобы получить тот же размер бина для обоих наборов данных.
plt.hist(x, bins=n, range=(a,b))
где, если вы сохраняете соотношение (b-a)/n
одинаково, вы должны иметь те же размеры бункера.
Ответ 3
Вы должны использовать возвращаемые значения hist
.
foo = np.random.normal(loc=1, size=100) # a normal distribution
bar = np.random.normal(loc=-1, size=10000) # a normal distribution
n, bins, patches = plt.hist(foo, bins=50, range=[-6, 6], normed=True)
n, bins, patches = plt.hist(bar, bins=bins, alpha=0.5, normed=True)
![введите описание изображения здесь]()