Интервалы погрешностей — Error Bar
Интервал погрешности представляет диапазон количественных значений через сводные статистики и отображает его отрезком с необязательными концевыми чертами. В Altair он может агрегировать исходные данные или напрямую показывать уже агрегированные.
Для создания используйте mark_errorbar.
Свойства интервалов погрешностей
Определение errorbar поддерживает следующие свойства:
Нажмите, чтобы показать таблицу
| Свойство | Тип | Описание |
|---|---|---|
extent | ErrorBarExtent | Диапазон отрезка: |
orient | Orientation | Ориентация интервала погрешностей. Обычно определяется автоматически; при неоднозначности, когда это невозможно, можно задать явно. |
color | anyOf(Color, Gradient, ExprRef) | Стандартный цвет. По умолчанию: ■ |
opacity | number | Непрозрачность примитива в диапазоне |
Кроме них, rule и ticks задают свойства примитивов отдельных частей интервала.
Агрегирование исходных данных
Если данные ещё не агрегированы, Altair агрегирует их согласно extent.
- Стандартная ошибка — вариант по умолчанию в Vega-Lite. Его можно явно задать через
extent="stderr". Нижний и верхний отрезки показывают стандартную ошибку и по умолчанию отходят от среднего:
import altair as alt
from altair.datasets import data
source = data.barley()
error_bars = alt.Chart(source).mark_errorbar().encode(
x=alt.X('yield:Q').scale(zero=False),
y=alt.Y('variety:N')
)
points = alt.Chart(source).mark_point(
filled=True,
color="black",
).encode(
x=alt.X("mean(yield)"),
y=alt.Y("variety:N"),
)
error_bars + points
- Стандартное отклонение задаётся через
extent="stdev". Нижний и верхний отрезки показывают стандартное отклонение и, как при стандартной ошибке, по умолчанию отходят от среднего:
import altair as alt
from altair.datasets import data
source = data.barley()
error_bars = alt.Chart(source).mark_errorbar(extent="stdev").encode(
x=alt.X("yield:Q").scale(zero=False),
y=alt.Y("variety:N"),
)
points = alt.Chart(source).mark_point(filled=True, color="black").encode(
x=alt.X("mean(yield)"),
y=alt.Y("variety:N"),
)
error_bars + points
- Межквартильный размах задаётся через
extent="iqr". Отрезок идёт от первого до третьего квартиля:
import altair as alt
from altair.datasets import data
source = data.barley()
error_bars = alt.Chart(source).mark_errorbar(extent="iqr").encode(
x=alt.X("yield:Q").scale(zero=False),
y=alt.Y("variety:N"),
)
points = alt.Chart(source).mark_point(
filled=True,
color="black"
).encode(
x=alt.X("mean(yield)"),
y=alt.Y("variety:N"),
)
error_bars + points
Отображение агрегированных данных
- Данные содержат нижнюю и верхнюю границы. Можно непосредственно задать x и x2 либо y и y2, используя интервал как примитив с диапазоном:
import altair as alt
import pandas as pd
source = pd.DataFrame({
"lower_yield": [23.1311, 23.9503, 24.7778, 21.7823],
"upper_yield": [43.5522, 38.9775, 46.9167, 48.9732],
"center": [32.4, 30.96667, 33.966665, 30.45],
"variety": ["Glabron", "Manchuria", "No. 457", "No. 462"],
})
bar = alt.Chart(source).mark_errorbar().encode(
alt.X("upper_yield:Q").scale(zero=False).title("yield"),
alt.X2("lower_yield:Q"),
alt.Y("variety:N"),
)
point = alt.Chart(source).mark_point(
filled=True,
color="black"
).encode(
alt.X("center:Q"),
alt.Y("variety:N")
)
point + bar
- Данные содержат центр и величины погрешности. Укажите x как центр, xError и xError2 как смещения от центра; либо используйте y, yError и yError2. Без
x/yError2погрешность симметрична:
import altair as alt
import pandas as pd
source = pd.DataFrame({
"yield_error": [7.5522, 6.9775, 3.9167, 11.9732],
"yield_center": [32.4, 30.96667, 33.966665, 30.45],
"variety": ["Glabron", "Manchuria", "No. 457", "No. 462"],
})
bar = alt.Chart(source).mark_errorbar().encode(
x=alt.X("yield_center:Q").scale(zero=False).title("yield"),
xError=("yield_error:Q"),
y=alt.Y("variety:N"),
)
point = alt.Chart(source).mark_point(
filled=True,
color="black"
).encode(
alt.X("yield_center:Q"),
alt.Y("variety:N"),
)
point + bar
Примечание: при заранее вычисленных асимметричных погрешностях одно из значений x/yError и x/yError2 должно быть положительным, а другое отрицательным.
Размерность и ориентация
Altair поддерживает одномерные и двумерные интервалы погрешностей.
Одномерный интервал показывает диапазон погрешности непрерывного поля. Ориентация автоматически определяется осью этого поля: например, поле по y создаёт вертикальный интервал:
import altair as alt
from altair.datasets import data
source = data.barley()
error_bars = alt.Chart(source).mark_errorbar().encode(
alt.Y("yield:Q").scale(zero=False)
)
points = alt.Chart(source).mark_point(
filled=True,
color="black"
).encode(
alt.Y("mean(yield)")
)
error_bars + points
Двумерные интервалы показывают погрешность непрерывного поля по категориям. Если непрерывное поле находится по x, интервалы горизонтальны; если по y — вертикальны:
import altair as alt
from altair.datasets import data
source = data.barley()
error_bars = alt.Chart(source).mark_errorbar(extent="stdev").encode(
alt.Y("yield:Q").scale(zero=False),
alt.X("variety:N"),
)
points = alt.Chart(source).mark_point(
filled=True,
color="black",
).encode(
alt.Y("mean(yield)"),
alt.X("variety:N"),
)
error_bars + points
Каналы цвета и непрозрачности
Внешний вид интервалов можно настроить каналами color и opacity. Здесь color равен alt.value("#4682b4"):
import altair as alt
from altair.datasets import data
source = data.barley()
error_bars = alt.Chart(source).mark_errorbar(ticks=True).encode(
alt.X("yield:Q").scale(zero=False),
alt.Y("variety:N"),
color=alt.value("#4682b4"),
)
points = alt.Chart(source).mark_point(
filled=True,
color="black"
).encode(
alt.X("mean(yield)"),
alt.Y("variety:N"),
)
error_bars + points
Канал подсказки
Можно задать собственные подсказки, которые заменят стандартные:
import altair as alt
from altair.datasets import data
source = data.barley()
alt.Chart(source).mark_errorbar().encode(
alt.X("yield:Q").scale(zero=False),
alt.Y("variety:N"),
tooltip="variety:N",
)