2016-03-09 2 views
3

Я думаю, что может Hist функции есть некоторые проблемы, в некоторых случаях, когда я сюжет гистограммы с Matplotlib:Matplotlib гистограмма добавляет небольшой бар на второе гистограмм бен

pylab.figure() 
H, bins, _ = pylab.hist([2,2]) 
print H 
print bins 

Результатом является:

histogram

[ 0. 0. 0. 0. 0. 2. 0. 0. 0. 0.] 
[ 1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5] 

вы видите на графике, что «вздутие» в пределах от 1,5 до 1,6, где она приходит от делать? Как я могу избежать этого?

+0

Что такое возврат, если вы пишете '' np.sum ((ar <2)) ''? – MSeifert

+0

Я возвращаюсь к 0. –

+2

Можете ли вы отредактировать массив или по крайней мере столько же массива в вопросе, чтобы он все еще показывал этот «удар» в 0? Постарайтесь сделать это как можно меньше. :) – MSeifert

ответ

0

Это интересно.

Вы можете посмотреть на прямоугольники сгенерированных:

ax = plt.subplot(111) 
h, bins, rects = ax.hist([2, 2]) 

for r in rects: 
    print(r.get_bbox()) 

# Bbox(x0=1.5, y0=0.0, x1=1.6, y1=0.0) 
# Bbox(x0=1.6, y0=0.0, x1=1.7, y1=0.0) 
# Bbox(x0=1.7, y0=0.0, x1=1.8, y1=0.0) 
# Bbox(x0=1.8000000000000003, y0=0.0, x1=1.9000000000000001, y1=0.0) 
# Bbox(x0=1.9, y0=0.0, x1=2.0, y1=0.0) 
# Bbox(x0=1.9999999999999998, y0=0.0, x1=2.0999999999999996, y1=2.0) 
# Bbox(x0=2.1000000000000005, y0=0.0, x1=2.2000000000000006, y1=0.0) 
# Bbox(x0=2.2, y0=0.0, x1=2.3, y1=0.0) 
# Bbox(x0=2.3, y0=0.0, x1=2.4, y1=0.0) 
# Bbox(x0=2.4000000000000004, y0=0.0, x1=2.5000000000000004, y1=0.0) 

Очевидно, что функция гистограммы генерирует прямоугольник для каждого бина, даже пустые. Хотя они имеют высоту 0, они передаются визуализатору, а в некоторых случаях ложное что-то нарисовано.

Я не знаю, как предотвратить это. Однако есть решение, но оно довольно хакерское. Функция hist помещает прямоугольный патч в ось для каждого бункера. Можно вручную перебрать эти патчи и удалить их с нулевой высотой:

ax = plt.subplot(111) 
h, bins, rects = ax.hist([2, 2]) 

ax.patches = [p for p in ax.patches if p.get_height() > 0] 
+0

Это действительно интересно! но я бы предпочел менее хакерское решение ... –

+0

Да, так бы я ... Возможно, можно считать ошибкой в ​​matplotlib, если нет хорошего обходного пути. – kazemakase

+0

Давайте подождать несколько дней, и в противном случае я сообщу об этом в matplotlit –

0

Это, кажется, проблема с рендерингом. Сохранение фигуры в формате pdf не показывает проблеск. Таким образом, в зависимости от вашего конечного использования фигуры это может оказаться не проблемой.

+0

В моем случае, ноутбук jupyter я предпочитаю иметь возможность доверять ему ... –

 Смежные вопросы

  • Нет связанных вопросов^_^