误差条#

误差条使用一组汇总统计量(由规则线和可选的末端刻度表示),总结了定量值的误差范围。Altair 中的误差条既可以用于聚合原始数据,也可以直接可视化聚合后的数据。

要创建误差条,请使用 mark_errorbar

误差条标记属性#

errorbar 标记定义可以包含以下属性

点击显示表格

属性

类型

描述

extent

ErrorBarExtent

规则线的范围。可用选项包括

  • "ci":将规则线扩展到均值的置信区间。

  • "stderr":规则线的大小设置为标准误差值,从均值扩展出去。

  • "stdev":规则线的大小设置为标准差值,从均值扩展出去。

  • "iqr":将规则线扩展到第一四分位数 (q1) 和第三四分位数 (q3)。

默认值: "stderr"

orient

Orientation

误差条的方向。通常会自动确定,但当方向模糊且无法自动确定时可以指定。

color

anyOf(Color, Gradient, ExprRef)

默认颜色。

默认值: :raw-html:<span style="color: #4682b4;"> ■ :raw-html:</span> "#4682b4"

注意

  • 此属性不能用于 style config <https://vega.github.io/vega-lite/docs/mark.html#style-config>__。

  • fillstroke 属性具有比 color 更高的优先级,并将覆盖 color

opacity

number

标记的不透明度(值在 [0,1] 之间)。

除了上面列出的属性外,还可以使用 ruleticks 来指定误差条不同部分的底层标记属性。

使用误差条聚合原始数据#

如果数据尚未聚合,Altair 将根据标记定义中的 extent 属性来聚合数据。

  1. 显示标准误差的误差条 是 Vega-Lite 中的默认误差条。也可以通过将 extent 设置为 "stderr" 来显式指定。下规则线和上规则线的长度表示标准误差。默认情况下,规则标记从均值扩展。

import altair as alt
from vega_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
  1. 显示标准差的误差条 可以通过将 extent 设置为 "stdev" 来指定。对于此类型的误差条,下规则线和上规则线的长度表示标准差。与显示标准误差的误差条一样,规则标记默认从均值扩展。

import altair as alt
from vega_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
  1. 显示四分位距的误差条 可以通过将 extent 设置为 "iqr" 来指定。对于此类型的误差条,规则标记从第一四分位数扩展到第三四分位数。

import altair as alt
from vega_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

使用误差条可视化聚合数据#

1. 数据已按误差条的低值和高值聚合。如果数据已预先按误差条的低值和高值聚合,您可以直接指定 xx2(或 yy2),将误差条用作范围标记。

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

2. 数据已按中心值和误差值聚合。如果数据已预先按误差条的中心值和误差值聚合,您可以直接将 x 指定为中心,将 xErrorxError2 指定为从中心扩展的误差值(或 yyErroryError2)。如果省略 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/yErrorx/yError2 中的一个必须是正值,另一个必须是负值。

维度与方向#

Altair 支持 1D 和 2D 误差带

1D 误差带 显示连续字段的误差范围。

误差条的方向由连续字段轴自动确定。例如,您可以通过在 y 轴上编码连续字段来创建垂直的 1D 误差条。

import altair as alt
from vega_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

2D 误差条 显示连续字段的误差范围,按类别细分。

对于包含一个连续字段和一个离散字段的 2D 误差条,如果连续字段在 x 轴上,则误差条将是水平的。反之,如果连续字段在 y 轴上,则误差条将是垂直的。

import altair as alt
from vega_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

颜色和不透明度编码通道#

您可以通过使用 coloropacity 编码通道来自定义条形的颜色和不透明度。

以下是一个将 color 编码通道设置为 alt.value("#4682b4")errorbar 示例。

import altair as alt
from vega_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 vega_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",
)