【问题标题】:Altair stacked area with custom sorting具有自定义排序功能的 Altair 堆叠区域
【发布时间】:2020-04-21 20:32:42
【问题描述】:

如何为堆积面积图的排序指定自定义顺序(即字符串列表)?

我想按图表上从最低到最高的顺序 ['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)

【问题讨论】:

    标签: python altair


    【解决方案1】:

    您可以使用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"
    )
    

    【讨论】:

    • 谢谢,我一直在向我的源数据框添加额外的列来实现这一点,但意识到你在输出 html 中得到了不必要的批量,所以transform_calculate 选项非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2011-01-19
    相关资源
    最近更新 更多