弧形#
弧形标记是由中心点加上角度和径向范围定义的圆弧。弧形标记通常用于径向图,如饼图和甜甜圈图。
弧形标记属性#
点击显示代码
import altair as alt
import numpy as np
import pandas as pd
rad_slider = alt.binding_range(min=0, max=100, step=1)
rad_var = alt.param(bind=rad_slider, value=0, name="radius")
rad2_slider = alt.binding_range(min=0, max=100, step=1)
rad_var2 = alt.param(bind=rad_slider, value=50, name="radius2")
theta_slider = alt.binding_range(min=-2 * np.pi, max=2 * np.pi)
theta_var = alt.param(bind=theta_slider, value=-0.73, name="theta_single_arc")
theta_slider2 = alt.binding_range(min=-2 * np.pi, max=2 * np.pi)
theta2_var = alt.param(bind=theta_slider, value=0.73, name="theta2_single_arc")
corner_slider = alt.binding_range(min=0, max=50, step=1)
corner_var = alt.param(bind=corner_slider, value=0, name="cornerRadius")
pad_slider = alt.binding_range(min=0, max=np.pi / 2)
pad_var = alt.param(bind=pad_slider, value=0, name="padAngle")
source = pd.DataFrame({"category": [1, 2, 3, 4, 5, 6], "value": [4, 6, 10, 3, 7, 8]})
c1 = alt.Chart(source, title="Single Arc").mark_arc(
radius=rad_var,
radius2=rad_var2,
theta=theta_var,
theta2=theta2_var,
cornerRadius=corner_var,
padAngle=pad_var,
)
c2 = (
alt.Chart(source, title="Stacked Arcs")
.mark_arc(
radius=rad_var,
radius2=rad_var2,
cornerRadius=corner_var,
padAngle=pad_var,
)
.encode(
theta=alt.Theta(field="value", type="quantitative"),
color=alt.Color(field="category", type="nominal"),
)
)
alt.hconcat(c1.properties(width=200), c2.properties(width=200)).add_params(
rad_var, rad_var2, theta_var, theta2_var, corner_var, pad_var
)
一个 arc
标记定义可以包含任何标准标记属性和以下特殊属性
点击显示表格
属性 |
类型 |
描述 |
---|---|---|
radius |
anyOf( |
对于弧形标记,主(外)半径(以像素为单位)。 对于文本标记,文本相对于由 默认值: |
radius2 |
anyOf( |
弧形标记的次(内)半径(以像素为单位)。 默认值: |
innerRadius |
anyOf( |
弧形标记的内半径(以像素为单位)。 默认值: |
outerRadius |
anyOf( |
弧形标记的外半径(以像素为单位)。 默认值: |
theta |
anyOf( |
|
theta2 |
anyOf( |
弧形标记的结束角度(以弧度为单位)。值为 0 表示向上或“北”,数值增加时按顺时针方向进行。 |
cornerRadius |
anyOf( |
圆角矩形或圆弧角的半径(以像素为单位)。 默认值: |
padAngle |
anyOf( |
应用于弧形侧面的角度填充(以弧度为单位)。 |
radiusOffset |
anyOf( |
radius 的偏移量。 |
radius2Offset |
anyOf( |
radius2 的偏移量。 |
thetaOffset |
anyOf( |
theta 的偏移量。 |
theta2Offset |
anyOf( |
theta2 的偏移量。 |
示例#
我们可以通过编码 theta
或 color
弧形标记来创建饼图。
import pandas as pd
import altair as alt
source = pd.DataFrame({"category": [1, 2, 3, 4, 5, 6], "value": [4, 6, 10, 3, 7, 8]})
alt.Chart(source).mark_arc().encode(
theta=alt.Theta(field="value", type="quantitative"),
color=alt.Color(field="category", type="nominal"),
)
将 innerRadius
设置为非零值将创建甜甜圈图。
import pandas as pd
import altair as alt
source = pd.DataFrame({"category": [1, 2, 3, 4, 5, 6], "value": [4, 6, 10, 3, 7, 8]})
alt.Chart(source).mark_arc(innerRadius=50).encode(
theta=alt.Theta(field="value", type="quantitative"),
color=alt.Color(field="category", type="nominal"),
)
您还可以添加文本层以为饼图添加标签。
import pandas as pd
import altair as alt
source = pd.DataFrame(
{"category": ["a", "b", "c", "d", "e", "f"], "value": [4, 6, 10, 3, 7, 8]}
)
base = alt.Chart(source).encode(
theta=alt.Theta("value:Q").stack(True),
color=alt.Color("category:N").legend(None),
)
pie = base.mark_arc(outerRadius=120)
text = base.mark_text(radius=140, size=20).encode(
text="category:N"
)
pie + text