误差条#
误差条使用一组汇总统计量(由规则线和可选的末端刻度表示),总结了定量值的误差范围。Altair 中的误差条既可以用于聚合原始数据,也可以直接可视化聚合后的数据。
要创建误差条,请使用 mark_errorbar
。
误差条标记属性#
errorbar
标记定义可以包含以下属性
点击显示表格
属性 |
类型 |
描述 |
---|---|---|
extent |
规则线的范围。可用选项包括
默认值: |
|
orient |
误差条的方向。通常会自动确定,但当方向模糊且无法自动确定时可以指定。 |
|
color |
默认颜色。 默认值: :raw-html: 注意
|
|
opacity |
|
标记的不透明度(值在 [0,1] 之间)。 |
除了上面列出的属性外,还可以使用 rule
和 ticks
来指定误差条不同部分的底层标记属性。
使用误差条聚合原始数据#
如果数据尚未聚合,Altair 将根据标记定义中的 extent
属性来聚合数据。
显示标准误差的误差条 是 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
显示标准差的误差条 可以通过将
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
显示四分位距的误差条 可以通过将
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. 数据已按误差条的低值和高值聚合。如果数据已预先按误差条的低值和高值聚合,您可以直接指定 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
2. 数据已按中心值和误差值聚合。如果数据已预先按误差条的中心值和误差值聚合,您可以直接将 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 支持 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
颜色和不透明度编码通道#
您可以通过使用 color
和 opacity
编码通道来自定义条形的颜色和不透明度。
以下是一个将 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",
)