Установка разных ошибок для панели сюжета панд - PullRequest
2 голосов
/ 04 июля 2019

Я пытаюсь построить распределение вероятностей, используя pandas.Series, и я пытаюсь установить разные yerr для каждого бара. Таким образом, я планирую следующее распределение:

enter image description here

Он исходит от Series и работает нормально, за исключением yerr. Он не может превышать 1 или 0. Поэтому я бы хотел установить разные ошибки для каждого бара. Поэтому я пошел к документации, которая доступна здесь и здесь .

По их словам, у меня есть 3 варианта использования yerr aor xerr:

  • скаляр: Симметричные значения +/- для всех точек данных.
  • скаляр: Симметричные +/- значения для всех точек данных.
  • shape (2, N): Отдельные значения - и + для каждого бара. Первая строка содержит нижние ошибки, вторая строка содержит верхние ошибки.

Мне нужен последний случай. В этом случае я могу использовать DataFrame, Series, array-like, dict и str. Таким образом, я установил массивы для каждого бара yerr, однако он не работает должным образом. Просто чтобы повторить происходящее, я подготовил следующие примеры:

Сначала я установил pandas.Series:

import pandas as pd
se = pd.Series(data=[0.1,0.2,0.3,0.4,0.4,0.5,0.2,0.1,0.1],
 index=list('abcdefghi'))

Затем я повторяю каждый случай:

Работает как положено:

err1 = [0.2]*9
se.plot(kind="bar", width=1.0, yerr=err1)

enter image description here

Это работает как ожидалось:

err2 = err1
err2[3] = 0.5
se.plot(kind="bar", width=1.0, yerr=err1)

enter image description here

Теперь проблема: Это не работает, как ожидалось!

err_up = [0.3]*9
err_low = [0.1]*9
err3 = [err_low, err_up]
se.plot(kind="bar", width=1.0, yerr=err3)

enter image description here

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

Я рад, если у вас есть какое-то решение по этому поводу. Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

Странно, plt.bar работает как положено:

err_up = [0.3]*9
err_low = [0.1]*9
err3 = [err_low, err_up]
fig, ax = plt.subplots()
ax.bar(se.index, se, width=1.0, yerr=err3)
plt.show()

Вывод:

enter image description here

Ошибка / функция / дизайнможет быть решение панд?

1 голос
/ 06 июля 2019

Основываясь на комментарии @Quanghoang, я начал думать, что это ошибка.Итак, я попытался изменить форму yerr, и неожиданно сработал следующий код:

err_up = [0.3]*9
err_low = [0.1]*9
err3 = [[err_low, err_up]]
print (err3)
se.plot(kind="bar", width=1.0, yerr=err3)

enter image description here

Заметьте, я включил новую осьв err3.Теперь это массив (1,2,N).Тем не менее, документация говорит, что это должно быть (2,N).

Кроме того, возможный обходной путь, который я нашел, был установлен на ax.ylim(0,1).Это не решает проблему, но строит график правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...