规则线#
mark rule
将每个数据点表示为一条线段。它有两种使用方式。首先,作为一条跨越视图完整宽度或高度的线段。其次,规则线可以用于在两个位置之间绘制线段。
规则线标记属性#
点击显示代码
import altair as alt
import pandas as pd
x_slider = alt.binding_range(min=1, max=100, step=1)
x_var = alt.param(bind=x_slider, value=35, name="x")
x2_slider = alt.binding_range(min=1, max=100, step=1)
x2_var = alt.param(bind=x2_slider, value=75, name="x2")
y_slider = alt.binding_range(min=1, max=100, step=1)
y_var = alt.param(bind=y_slider, value=25, name="y")
y2_slider = alt.binding_range(min=1, max=100, step=1)
y2_var = alt.param(bind=y2_slider, value=75, name="y2")
strokeWidth_slider = alt.binding_range(min=0, max=10, step=0.5)
strokeWidth_var = alt.param(bind=strokeWidth_slider, value=2, name="strokeWidth")
strokeCap_select = alt.binding_select(options=["butt", "round", "square"])
strokeCap_var = alt.param(bind=strokeCap_select, value="butt", name="strokeCap")
strokeDash_select = alt.binding_select(
options=[[1, 0], [8, 8], [8, 4], [4, 4], [4, 2], [2, 1], [1, 1]]
)
strokeDash_var = alt.param(bind=strokeDash_select, value=[1, 0], name="strokeDash")
alt.Chart().mark_rule(
color="orange",
strokeWidth=strokeWidth_var,
strokeCap=strokeCap_var,
strokeDash=strokeDash_var,
).encode(
x=alt.datum(x_var, type="quantitative", scale=alt.Scale(domain=[0, 100])),
y=alt.datum(y_var, type="quantitative", scale=alt.Scale(domain=[0, 100])),
x2=alt.datum(x2_var),
y2=alt.datum(y2_var),
).add_params(
x_var,
x2_var,
y_var,
y2_var,
strokeWidth_var,
strokeCap_var,
strokeDash_var,
)
一个 rule
标记定义可以包含任何标准标记属性。
示例#
跨越宽度/高度的规则线#
如果 rule
标记只有 y
编码,输出视图将生成跨越完整宽度的水平规则线。类似地,如果 rule
标记只有 x
编码,输出视图将生成跨越高度的垂直规则线。
我们可以使用规则线来显示不同股票的平均价格,类似于 tick
标记。
import altair as alt
from vega_datasets import data
source = data.stocks()
alt.Chart(source).mark_rule().encode(
y="mean(price):Q",
size=alt.value(2),
color="symbol:N"
)
规则线标记跨越单个视图的宽度或高度这一事实使其成为有用的注释层。例如,我们可以使用规则线在价格曲线旁边显示不同股票的平均值。
import altair as alt
from vega_datasets import data
source = data.stocks()
base = alt.Chart(source).properties(width=550)
line = base.mark_line().encode(
x="date",
y="price",
color="symbol"
)
rule = base.mark_rule().encode(
y="average(price)",
color="symbol",
size=alt.value(2)
)
line + rule
我们也可以使用规则线标记在直方图上显示全局平均值。
import altair as alt
from vega_datasets import data
source = data.movies.url
base = alt.Chart(source)
bar = base.mark_bar().encode(
x=alt.X("IMDB_Rating:Q").bin().axis(None),
y="count()"
)
rule = base.mark_rule(color="red").encode(
x="mean(IMDB_Rating):Q",
size=alt.value(5),
)
bar + rule
范围规则线#
要控制水平/垂直规则线的跨度,可以指定 x
和 x2
/ y
和 y2
通道。
例如,我们可以使用 y
和 y2
来显示不同地区汽车马力的 "min"
和 "max"
值。
import altair as alt
from vega_datasets import data
source = data.cars()
alt.Chart(source).mark_rule().encode(
x="Origin",
y="min(Horsepower)",
y2="max(Horsepower)",
)