阿尔泰尔自定义排序的堆叠面积图

4
如何指定堆叠区域图的自定义排序方式(即字符串列表)?我希望按照 ['B', 'A', 'C'] 的顺序从低到高在图表上排列区域,而不考虑值。我查看了alt.Order的文档,但似乎它是基于聚合而非固定的自定义顺序。请帮忙解决。

enter image description here

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)
1个回答

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"
)

enter image description here


谢谢,我一直在向我的源数据框添加额外的列来实现这一点,但是意识到这会导致输出HTML中出现不必要的冗余,所以“transform_calculate”选项非常好。 - ac24

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接