Функция Matplotlib errorbar()


Matplotlib 参考文档Справочная документация Matplotlib

errorbar()Используется для построения линейных графиков с планками погрешностей, отображающих диапазон неопределенности измеренных значений в точках данных.

Широко используется в научных экспериментах, статистическом анализе и визуализации инженерных данных.

Определение функции

Интерфейс pyplot

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt='',
    ecolor=None, elinewidth=None, capsize=None, barsabove=False,
    lolims=False, uplims=False, xlolims=False, xuplims=False,
    errorevery=1, capthick=None, *, **kwargs)

Интерфейс Axes

Axes.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None,
    elinewidth=None, capsize=None, barsabove=False, lolims=False,
    uplims=False, xlolims=False, xuplims=False, errorevery=1,
    capthick=None, *, **kwargs)

Описание параметра

ПараметрTypeОписание
x, yмассивоподобныйКоординаты точки данных
yerr / xerrfloat или array-likeПогрешность в направлении y/x. Скаляр означает одинаковую погрешность для всех точек; массив означает независимые погрешности для каждой точки. Двумерный массив может задавать нижнюю и верхнюю погрешности как [lo, hi].
fmtstrСтрока формата для точек данных, например 'o' (круг), 's' (квадрат), 'o-' (круг + линия).
ecolorcolorЦвет линий планок погрешностей.
elinewidthfloatШирина линий планок погрешностей.
capsizefloatДлина концевых линий планок погрешностей (в точках).
capthickfloatТолщина концевых линий планок погрешностей.
barsaboveboolЕсли True, планки погрешностей рисуются поверх точек данных.
lolims / uplimsмассивоподобный объект из boolОтметить нижний/верхний предел по направлению y (только односторонние стрелки).
xlolims / xuplimsмассивоподобный объект из boolОтметить нижний/верхний предел по направлению x.
erroreveryintРисовать планки погрешностей через каждые несколько точек данных (уменьшает визуальную загромождённость при плотных данных).

errorbar() возвращаетErrorbarContainerобъект, содержащий(plotline, caplines, barlinecols), позволяя отдельно получать доступ к основной линии и линиям планок погрешностей.


Примеры использования

Пример 1: базовые планки погрешностей

Пример

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5])
y = np.array([3.5, 5.2, 4.8, 6.1, 7.3])
y_err = np.array([0.3, 0.5, 0.4, 0.6, 0.5])  # Погрешность для каждой точки

fig, ax = plt.subplots(layout='constrained')

# Нарисовать линейный график с планками погрешностей
ax.errorbar(x, y, yerr=y_err,
            fmt='o-',             # Кружки + линия
            color='steelblue',
            ecolor='gray',        # Цвет планок погрешностей
            elinewidth=1.5,       # Толщина линий планок погрешностей
            capsize=5,            # Длина концевых штрихов
            capthick=1.5,
            markersize=8,
            label='Измерение')

ax.set_title('График с планками погрешностей по y')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Пример 2: Неравные погрешности (разные верхние и нижние)

Пример

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(5)
y = np.array([10, 12, 9, 15, 13])

# Двумерный массив: первая строка — погрешность нижней границы, вторая строка — погрешность верхней границы
y_err = np.array([[0.5, 0.8, 0.6, 1.0, 0.7],   # Нижняя погрешность
                  [1.5, 1.2, 2.0, 0.8, 1.3]])  # Верхняя погрешность

fig, ax = plt.subplots(layout='constrained')

ax.errorbar(x, y, yerr=y_err,
            fmt='s',              # Квадратный маркер, без линии
            color='coral',
            ecolor='black',
            capsize=6,
            markersize=10,
            markerfacecolor='white',
            markeredgewidth=1.5,
            label='Асимметричная ошибка')

ax.set_title('Асимметричные полосы ошибок (разные верхняя/нижняя)')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Пример 3: Двунаправленные полосы ошибок (ошибки в направлениях x и y)

Пример

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
x = np.arange(8)
y = 2 * x + 1 + np.random.randn(8) * 2
x_err = np.full(8, 0.3)          # ошибка по направлению x (одинаковая для всех точек)
y_err = np.random.rand(8) * 3    # ошибка по направлению y (разная для каждой точки)

fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')

ax.errorbar(x, y,
            xerr=x_err,           # ошибка по направлению x
            yerr=y_err,           # ошибка по направлению y
            fmt='o',
            color='#8e44ad',
            ecolor='gray',
            capsize=4,
            markersize=8,
            label='Ошибка 2D')

ax.set_title('Усы погрешностей в направлениях X и Y')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Пример 4: использование errorevery для уменьшения визуального загромождения

Пример

import matplotlib.pyplot as plt
import numpy as np

# Плотные точки данных (100 точек)
x = np.linspace(0, 10, 100)
y = np.sin(x) + np.random.randn(100) * 0.1
y_err = np.full(100, 0.15)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4),
                                 layout='constrained')

# Левый график: показывать усы погрешностей для каждой точки (слишком плотно)
ax1.errorbar(x, y, yerr=y_err, fmt='o', markersize=3,
             capsize=2, elinewidth=0.5, errorevery=1)
ax1.set_title('errorevery=1 (слишком плотно)')

# Правый график: показывать ус погрешности каждые 8 точек
ax2.errorbar(x, y, yerr=y_err, fmt='o', markersize=3,
             capsize=2, elinewidth=0.5, errorevery=8)
ax2.set_title('errorevery=8 (более чистый)')

for ax in [ax1, ax2]:
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.grid(True, alpha=0.3)

plt.show()

Часто задаваемые вопросы

Различные формы yerr?

Скаляр: одна и та же ошибка для всех точек.

Одномерный массив (N,): симметричная ошибка для каждой точки (верхняя и нижняя совпадают).

Двумерный массив (2, N): первая строка — нижняя ошибка, вторая строка — верхняя ошибка.

Что делать, если вы не хотите линии между точками данных?

будетfmtЗадайте формат только с маркерами, например,'o'、's'、'^', опустив часть со стилем линии.


Matplotlib 参考文档Справочная документация Matplotlib

Другие расширения