【问题标题】:Why does creating a layered bar chart remove sorting?为什么创建分层条形图会删除排序?
【发布时间】:2019-10-03 04:09:29
【问题描述】:

我正在尝试使用Altair 创建堆积条形图。我想用降序排列的所有条形总数的百分比来标记每个条形。下面是我创建两层的方法(一层用于条形,一层用于标签):

import pandas as pd
import altair as alt

df1 = 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 + text
both

如何在合并图层时保持条形排序?

【问题讨论】:

    标签: python altair


    【解决方案1】:

    Vega-Lite 不支持对联合域进行排序。如果您打开图表的 javascript 控制台,或者如果您 view it in the vega editor,您将看到 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
    

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多