Гистограмма Matplotlib показывает неровные бары - PullRequest
0 голосов
/ 20 января 2019

Если мы посмотрим на этот код и данные x, y,

rects1 = plt.bar([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1],[1, 2, 4, 10, 5, 9, 1,4, 9, 9],edgecolor='black')
plt.xlabel('Sample Mean')
plt.ylabel('Probability')

это отображает следующий график
enter image description here

Не могу понять, как значения х выходят за пределы 1 и даже принимают отрицательные значения. Кроме того, почему стержни имеют разную ширину?

1 Ответ

0 голосов
/ 20 января 2019

Проблема в том, что ваши значения x разделены интервалом 0,1, а ширина полосы по умолчанию равна 1, поэтому вы видите перекрывающиеся полосы. Решение состоит в том, чтобы определить ширину стержня. В вашем случае ширина стержня меньше 0,1 будет отлично работать. Например, вы можете использовать width=0.05, и вы получите следующий график.

Почему отрицательный? : бары по умолчанию центрированы на 0, 1, 2, 3 и т. Д. Таким образом, ваш первый столбец в вопросе был нарисован по центру 0 и имел ширину 1. Поэтому он колебался от -0,5 до +0,5.

rects1 = plt.bar([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1],
                 [1, 2, 4, 10, 5, 9, 1,4, 9, 9], width=0.05, edgecolor='black')
plt.xlabel('Sample Mean')
plt.ylabel('Probability')

enter image description here

Если вы не хотите, чтобы столбцы были при x <0 </strong>: вы можете выровнять столбцы вправо, передав аргумент align='edge.

rects1 = plt.bar([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1],
                 [1, 2, 4, 10, 5, 9, 1,4, 9, 9], width=0.05, align='edge', 
                 edgecolor='black')

enter image description here

...