Как добавить полосы ошибок к линейному графику Matplotlib?

Вопрос или проблема

У меня есть следующий набор данных, который я использую для построения линейного графика. График получается как среднее значений, полученных из данных. Я хочу добавить ошибочные полосы к этому графику, которые будут показывать стандартное отклонение. Я посмотрел разные ответы, но в большинстве из них они явно определяли 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()

Пояснения к коду

  1. Импортирование библиотек: В начале необходимо импортировать pandas и matplotlib.pyplot, которые являются основными библиотеками для работы с данными и построения графиков соответственно.

  2. Вычисление средних и стандартных отклонений: Методы mean() и std() используются для вычисления средних значений и стандартных отклонений по всем данным в пределах измерений (от -7 до 7).

  3. Построение графика: Метод errorbar() позволяет добавлять погрешности (ошибки) в точках на графике. В параметре yerr= вы передаете стандартное отклонение для вертикальных погрешностей, а fmt='-o' устанавливает стиль линии и маркеров.

  4. Настройка графика: Легенда и подписи осей помогают пользователю понять контекст отображаемых данных.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...