Подтвердить что ты не робот

Невозможно получить гистограмму для отображения отдельных бункеров с вертикальными линиями

Раздражающая странная проблема, и я еще не смог найти решение на этом сайте (хотя вопрос появился)

Я пытаюсь сделать гистограмму, где у бункеров есть "стиль бара", где вертикальные линии разделяют каждый бит, но независимо от того, что я меняю конструктор histtype, я получаю заполненную шаг гистограмму.

Вот мой код. Примечание. Я использую jupyter notebook, установленный через anaconda с версией python 2.7.6.

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand((100)) 
bins = np.linspace(0, 2, 40)
plt.title('Relative Amplitude',fontsize=30)
plt.xlabel('Random Histogram')
plt.ylabel('Frequency',fontsize=30)
plt.hist(x, bins, alpha=0.5, histtype='bar')

plt.legend(loc='upper right',fontsize=30)
plt.xticks(fontsize = 20) 
plt.yticks(fontsize = 20) 
plt.show() 

Это и я получаю диаграмму, заполненную шагами, без вертикальных линий, разделяющих столбцы. Что раздражает то, что у меня не было этой проблемы некоторое время назад, что-то явно изменилось, и я не знаю, что. Я попробовал histype = 'barstacked'. Благодарим вас за помощь.

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

4b9b3361

Ответ 1

Используя ваш пример:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand((100)) 
bins = np.linspace(0, 2, 40)
plt.title('Relative Amplitude',fontsize=30)
plt.xlabel('Random Histogram')
plt.ylabel('Frequency',fontsize=30)
plt.hist(x, bins, alpha=0.5, histtype='bar', ec='black')

plt.legend(loc='upper right',fontsize=30)
plt.xticks(fontsize = 20) 
plt.yticks(fontsize = 20) 
plt.show() 

Который производит следующее изображение:

enter image description here

Ключевым отличием является использование ключевого аргумента ec. Это сокращение от "edgecolor". В документации к plt.hist говорится, что в дополнение ко всем перечисленным аргументам ключевых слов plt.hist также принимает аргументы ключевых слов для инициализатора Patch. edgecolor является одним из этих ключевых аргументов. Вот почему это явно не указано в документации для plt.hist. Все столбцы на графике представляют собой отдельный объект Patch, поэтому вы говорите, что хотите, чтобы все edgecolor были нарисованы черным контуром (или edgecolor на жаргонном языке matplotlib).