代码之家  ›  专栏  ›  技术社区  ›  Tarantula

Altair中带标签值的分层或刻面条形图

  •  1
  • Tarantula  · 技术社区  · 7 年前

    我正在尝试创建一个简单的条形图(对于特定字段有多个列):

    bars = alt.Chart(df_probing).mark_bar(stroke='transparent').encode(
        alt.X('model_name:N', scale=alt.Scale(rangeStep=12), axis=alt.Axis(title='')),
        alt.Y('acc:Q', axis=alt.Axis(title='Accuracy', grid=False)),
        color=alt.Color('model_name:N'),
        column='task_name:N'
    ).configure_view(
        stroke='transparent'
    ).configure_axis(
        domainWidth=0.8
    ) 
    

    现在,这个绘图效果很好,但是当我尝试在条形图上添加值标签时 like this :

    text = bars.mark_text(
        align='center',
    ).encode(
        text='acc:Q'
    )
    
    bars + text
    

    它抛出以下错误:

    ValueError: Objects with "config" attribute cannot be used within LayerChart. Consider defining the config attribute in the LayerChart object instead.
    

    如何将条形标签添加到面/分层图上条形图中的每个条形图?

    1 回复  |  直到 7 年前
        1
  •  3
  •   jakevdp    7 年前

    这个 configure_* 方法只适用于顶级图表;错误试图告诉您这一点,但它并没有尽可能清楚。

    解决方案是将配置移动到顶级对象;也就是说,执行以下操作:

    bars = alt.Chart(df_probing).mark_bar(stroke='transparent').encode(
        alt.X('model_name:N', title='', scale=alt.Scale(rangeStep=12)),
        alt.Y('acc:Q', title='Accuracy', axis=alt.Axis(grid=False)),
        color='model_name:N',
        column='task_name:N'
    ) 
    
    text = bars.mark_text(
        align='center',
    ).encode(
        text='acc:Q'
    )
    
    alt.layer(bars, text).configure_view(
        stroke='transparent'
    ).configure_axis(
        domainWidth=0.8
    )