区域#
area
标记将多个数据元素表示为一个单独的区域形状。区域标记通常用于显示随时间的变化,可以使用单个区域或堆叠区域。
区域标记属性#
点击显示代码
import altair as alt
import pandas as pd
interpolate_select = alt.binding_select(
options=[
"basis",
"cardinal",
"catmull-rom",
"linear",
"monotone",
"natural",
"step",
"step-after",
"step-before",
],
name="interpolate",
)
interpolate_var = alt.param(bind=interpolate_select, value="linear")
tension_slider = alt.binding_range(min=0, max=1, step=0.05, name="tension")
tension_var = alt.param(bind=tension_slider, value=0)
source = pd.DataFrame({"u": [1, 2, 3, 4, 5, 6], "v": [28, 55, 42, 34, 36, 38]})
alt.Chart(source).mark_area(interpolate=interpolate_var, tension=tension_var).encode(
x="u", y="v"
).add_params(interpolate_var, tension_var)
一个 area
标记定义可以包含任何标准标记属性以及以下线条插值、线条和点叠加属性
点击显示表格
属性 |
类型 |
描述 |
---|---|---|
align |
文本或范围标记(区域、条形、图像、矩形、规则线)的水平对齐方式。可选值包括 注意:范围标记不支持表达式引用。 |
|
baseline |
anyOf( |
对于文本标记,垂直文本基线。可选值包括 对于范围标记,标记的垂直对齐方式。可选值包括 注意:范围标记不支持表达式引用。 |
orient |
非堆叠条形图、刻度线图、区域图和折线图的方向。可选值包括 horizontal(水平,默认)或 vertical(垂直)。
|
|
interpolate |
anyOf( |
用于折线和区域标记的线条插值方法。可选值如下:
|
tension |
anyOf( |
根据插值类型,设置 tension 参数(适用于折线和区域标记)。 |
line |
anyOf( |
一个标志,用于在区域标记上方叠加线条,或一个定义叠加线条属性的对象。
默认值: |
point |
anyOf( |
一个标志,用于在折线或区域标记上方叠加点,或一个定义叠加点属性的对象。
默认值: |
示例#
区域图#
使用 area
标记,并搭配一个时间或有序字段(通常在 x
轴)和一个定量字段(通常在 y
轴),可以生成一个区域图。例如,下面的区域图显示了美国随时间变化的失业人数。
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries.url
alt.Chart(source).mark_area().encode(
x="yearmonth(date):T",
y="sum(count):Q",
).properties(width=300, height=200)
叠加线条和点标记的区域图#
通过将标记定义的 line
和 point
属性设置为 true
或一个定义叠加点标记属性的对象,我们可以将线条和点标记叠加在区域上方。
import altair as alt
from vega_datasets import data
source = data.stocks.url
alt.Chart(source).mark_area(line=True, point=True).encode(
x="date:T",
y="price:Q",
).transform_filter(
alt.datum.symbol == "GOOG"
)
除了使用单一颜色作为区域的填充色外,我们还可以将其设置为渐变色。在此示例中,我们还自定义了叠加层。有关渐变选项的更多信息,请参见 Vega-Lite 渐变文档。
import altair as alt
from vega_datasets import data
source = data.stocks()
alt.Chart(source).transform_filter(alt.datum.symbol == "GOOG").mark_area(
line={"color": "darkgreen"},
color=alt.Gradient(
gradient="linear",
stops=[
alt.GradientStop(color="white", offset=0),
alt.GradientStop(color="darkgreen", offset=1),
],
x1=1,
x2=1,
y1=1,
y2=0,
),
).encode(
alt.X("date:T"),
alt.Y("price:Q"),
)
堆叠区域图#
默认情况下,向区域图添加颜色字段会创建堆叠区域图。例如,在这里我们按行业分割区域图。
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries.url
alt.Chart(source).mark_area().encode(
alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
alt.Y("sum(count):Q"),
alt.Color("series:N").scale(scheme="category20b"),
)
规范化堆叠区域图#
您还可以通过在编码通道中将 stack
设置为 "normalize"
来创建规范化堆叠区域图。在这里,我们可以轻松地看到各行业的失业率百分比。
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries.url
alt.Chart(source).mark_area().encode(
alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
alt.Y("sum(count):Q").stack("normalize"),
alt.Color("series:N").scale(scheme="category20b"),
)
流图#
我们还可以通过在编码通道中将 stack
设置为 "center"
,将堆叠区域图的基线移动到中心,生成流图。添加 interactive
方法可以对 x 轴比例尺进行缩放和平移。
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries.url
alt.Chart(source).mark_area().encode(
alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
alt.Y("sum(count):Q").stack("center").axis(None),
alt.Color("series:N").scale(scheme="category20b"),
).interactive()
范围区域#
为区域标记的定量轴指定 X2
或 Y2
会产生范围区域。例如,我们可以使用范围区域来突出显示按 monthdate
聚合的随时间变化的最低和最高测量温度。
import altair as alt
from vega_datasets import data
source = data.seattle_weather()
alt.Chart(source).mark_area(opacity=0.7).encode(
alt.X("monthdate(date):T").title("Date"),
alt.Y("mean(temp_max):Q").title("Daily Temperature Range (C)"),
alt.Y2("mean(temp_min):Q"),
).properties(width=600, height=300)