为了账号安全,请及时绑定邮箱和手机立即绑定

为什么创建分层条形图会删除排序?

为什么创建分层条形图会删除排序?

呼如林 2022-06-14 10:43:01
我正在尝试使用Altair创建堆积条形图。我想用所有条形总数的百分比按降序标记每个条形。以下是我创建两层的方法(一层用于条形,一层用于标签):import pandas as pdimport altair as altdf1 = pd.DataFrame({'a': list('AAAABBBB'),                    'b': list('xxyyxxyy'),                    'c': [2, 7, 4, 1, 2, 6, 8, 4]})df2 = df1.groupby('a', as_index=False).sum()df2['pct'] = (df2['c'] / df2['c'].sum()).round(2)bars = alt.Chart(df1).mark_bar().encode(    x=alt.X('c', scale=alt.Scale(domain=[0, 22])),    y=alt.Y('a', sort=alt.EncodingSortField(field='c', order='descending')),    color='b',)text = alt.Chart(df2).mark_text(dx=15).encode(    x='c',    y=alt.Y('a', sort=alt.EncodingSortField(field='c', order='descending')),    text='c')每一层都按正确的顺序排序,看起来不错。但是当我组合它们时,排序被重置,它们不再按降序排序。both = bars + textboth组合图层时如何保持条形排序?
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

Vega-Lite 不支持对联合域进行排序。如果您打开图表的 javascript 控制台,或者在 vega 编辑器中查看它,您将看到 Vega-Lite 产生的警告:


[Warning] Dropping sort property {"field":"c","op":"sum","order":"descending"} as unioned domains only support boolean or op "count".

[Warning] Dropping sort property {"field":"c","op":"mean","order":"descending"} as unioned domains only support boolean or op "count".

相关的 Vega-Lite 错误在这里:https ://github.com/vega/vega-lite/issues/5048 。


如果您从同一数据集构建两个图层,则可以避免这种情况;例如:


bars = alt.Chart(df1).mark_bar().encode(

    x=alt.X('c:Q', scale=alt.Scale(domain=[0, 22])),

    y=alt.Y('a:N', sort=alt.EncodingSortField(field='c', op='sum', order='descending')),

    color='b:N',

)


text = alt.Chart(df1).mark_text(dx=15).encode(

    x='sum(c):Q',

    y=alt.Y('a:N', sort=alt.EncodingSortField(field='c', op='sum', order='descending')),

    text=alt.Text('sum(c):Q')

)


bars + text

//img1.sycdn.imooc.com//62a7f5e700014bb204770083.jpg

查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号