带自定义排序的 Altair 堆叠区域

ac2*_*c24 4 python altair

如何指定自定义顺序(即字符串列表)来对堆积面积图进行排序?

我想在图表上按 ['B'、'A'、'C'] 从最低到最高的顺序对区域进行排序,无论值如何。我查看了 alt.Order 的文档,但这似乎是基于聚合,而不是固定的自定义顺序。

在此输入图像描述

import altair as alt
import pandas as pd

df = pd.DataFrame(
    {'A': range(0,10),
    'B': range(0,20,2),
     'C': range(0,30,3)
    },
)
df['date'] = range(0,10)
df = df.melt(id_vars='date')

chart = alt.Chart(df).mark_area().encode(
    x="date",
    y=alt.Y("value:Q", stack='zero'),
    color="variable",
)
display(chart)
Run Code Online (Sandbox Code Playgroud)

jak*_*vdp 6

您可以使用order通道和转换来计算所需的顺序来执行此操作。sort调整图例的属性以使其与堆栈顺序匹配也很有帮助:

alt.Chart(df).transform_calculate(
    order="{'B':0, 'A': 1, 'C': 2}[datum.variable]"  
).mark_area().encode(
    x="date",
    y=alt.Y("value:Q", stack='zero'),
    color=alt.Color("variable", sort=alt.SortField("order", "descending")),
    order="order:O"
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述