Вопрос или проблема
У меня есть следующий набор данных, который я использую для построения линейного графика. График получается как среднее
значений, полученных из данных. Я хочу добавить ошибочные полосы к этому графику, которые будут показывать стандартное отклонение. Я посмотрел разные ответы, но в большинстве из них они явно определяли x
и y
, но здесь я вычисляю график напрямую из фрейма данных. Как добавить ошибочную полосу к этому графику?
Фрейм данных df
UserId | date |-7|-6|-5|-4|-3|-2|-1|0 |1 |2 |3 |4 |5 |6 |7
1 2009-10-17 17:38:32.590 |0 |0 |0 |0 |0 |0 |1 |0 |1 |0 |0 |0 |0 |0 |0
2 2009-10-19 00:37:23.067 |0 |0 |0 |0 |0 |1 |1 |0 |1 |0 |0 |0 |0 |0 |0
3 2009-10-20 08:37:14.143 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0
4 2009-10-21 18:07:51.247 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0
5 2009-10-22 21:25:24.483 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0
Код
badges = ["A", "B", "C"]
for badge in badges:
res.iloc[:,2:].mean().plot(kind='line', label = badge)
Вывод
Почему бы не вычислить значения x
явно? В приведенном выше фрейме данных,
x = [c for c in res.columns() if isinstance(int, c)]
Тогда код может быть следующим.
badges = ["A", "B", "C"]
fig, ax = plt.subplots()
for badge in badges:
means = res.iloc[:,2:].mean()
std = res.iloc[:, 2:].std()
means.plot(kind='line', label = badge)
ax.plot(means)
ax.fill_between(x, means.sub(std), means.add(std), color="b", alpha=.1)
Примечание: В приведенном выше коде вы используете badges
только в графике. Возможно, вычисление средних и стандартных отклонений следует выполнять вне цикла? Я не уверен, потому что ваш пример фрейма данных выше не имеет значков.
Ответ или решение
Чтобы добавить погрешности (Error Bars) к линейному графику, созданному с использованием библиотеки Matplotlib, можно воспользоваться стандартным отклонением в качестве меры разброса ваших данных. В данном случае вы рассчитываете средние значения и стандартное отклонение для данных в DataFrame. Ниже приведен детализированный подход к решению вашей задачи.
Шаг 1: Подготовка данных
Сначала необходимо выполнить несколько операций с вашим DataFrame df
, чтобы рассчитать средние значения и стандартное отклонение по каждому столбцу. Используйте метод mean()
для вычисления средних значений и std()
для стандартного отклонения.
import pandas as pd
import matplotlib.pyplot as plt
# Пример данных в DataFrame
data = {
'UserId': [1, 2, 3, 4, 5],
'date': [
'2009-10-17 17:38:32.590',
'2009-10-19 00:37:23.067',
'2009-10-20 08:37:14.143',
'2009-10-21 18:07:51.247',
'2009-10-22 21:25:24.483'
],
'-7': [0, 0, 0, 0, 0],
'-6': [0, 0, 0, 0, 0],
'-5': [0, 0, 0, 0, 0],
'-4': [0, 0, 0, 0, 0],
'-3': [0, 0, 0, 0, 0],
'-2': [0, 1, 0, 0, 0],
'-1': [1, 1, 1, 1, 1],
'0': [0, 0, 0, 0, 0],
'1': [1, 1, 0, 0, 0],
'2': [0, 0, 0, 0, 0],
'3': [0, 0, 0, 0, 0],
'4': [0, 0, 0, 0, 0],
'5': [0, 0, 0, 0, 0],
'6': [0, 0, 0, 0, 0],
'7': [0, 0, 0, 0, 0]
}
df = pd.DataFrame(data)
# Вычисление средних значений и стандартного отклонения
means = df.iloc[:, 2:].mean()
std_devs = df.iloc[:, 2:].std()
x = df.columns[2:].astype(int) # Получение x-значений из названий столбцов
Шаг 2: Построение графика с погрешностями
Теперь, имея средние значения и стандартное отклонение, можно построить график. Используйте метод errorbar()
для добавления погрешностей.
# Создание графика
plt.figure(figsize=(10, 5))
plt.errorbar(x, means, yerr=std_devs, fmt='-o', label='Mean with STD', capsize=5)
# Настройка осей и заголовка
plt.xlabel('Значения x')
plt.ylabel('Среднее значение')
plt.title('Линейный график с погрешностями')
plt.legend()
# Показать график
plt.show()
Пояснения к коду
-
Импортирование библиотек: В начале необходимо импортировать
pandas
иmatplotlib.pyplot
, которые являются основными библиотеками для работы с данными и построения графиков соответственно. -
Вычисление средних и стандартных отклонений: Методы
mean()
иstd()
используются для вычисления средних значений и стандартных отклонений по всем данным в пределах измерений (от -7 до 7). -
Построение графика: Метод
errorbar()
позволяет добавлять погрешности (ошибки) в точках на графике. В параметреyerr=
вы передаете стандартное отклонение для вертикальных погрешностей, аfmt='-o'
устанавливает стиль линии и маркеров. -
Настройка графика: Легенда и подписи осей помогают пользователю понять контекст отображаемых данных.
Заключение
Теперь у вас есть линейный график, который визуально показывает не только средние значения, но и стандартные отклонения ваших данных. Этот подход также можно адаптировать для работы с более сложными наборами данных или различными видами графиков. Модифицируйте код в соответствии с вашими потребностями, чтобы визуализировать данные наилучшим образом.