使用 Altair mark_text 在堆积条形图中堆积文本

问题描述

我正在尝试使用 mark_text 在堆积条形图中创建堆积文本。我想用“时间”的值来标记每个条。是否可以在堆积面积图的相应堆栈中包含文本标记? 这是我创建条形图和文本图的方法

bar = alt.Chart(df_pivot,title = {'text' :'How do people spend their time?','subtitle' : 'Average of minutes per day from time-use diaries for people between 15 and 64'}).mark_bar().transform_calculate(
    filtered="datum.Category == 'Paid work'"
).transform_joinaggregate(sort_val="sum(filtered)",groupby=["Country"]
).encode(
    x=alt.X('Time',stack='zero'),y=alt.Y('Country',sort=alt.sortField('sort_val',order='descending')),color=alt.Color('Category:N',sort=CatOrder),order=alt.Order('color_Category_sort_index:Q'),tooltip=['Country','Category','Time']
).interactive()
bar

bar

text = alt.Chart(df_pivot).mark_text(align='center',baseline='middle',color='black').transform_calculate(
    filtered="datum.Category == 'Paid work'"
).transform_joinaggregate(sort_val="sum(filtered)",groupby=["Country"]
).encode(
    x=alt.X('Time:Q',detail='Category:N',text=alt.Text('Time:Q',format='.0f')
)
bar + text

bar+text

问题:

  • 文本不在正确的堆栈中&文本的顺序也有误。
  • Y 排序被重置,它们不再按预期排序。

并不是我不明白为什么我会有这些问题。我是这个平台的新手,源代码通过我的笔记本:https://www.kaggle.com/interphuoc0101/times-use。非常感谢。

解决方法

您的条形图指定了一个堆栈顺序:

order=alt.Order('color_Category_sort_index:Q'),

您应该向文本层添加匹配的 order 编码,以确保文本以相同的顺序显示。