【问题标题】:Altair: How to add labels to bar charts that have rowsAltair:如何向具有行的条形图添加标签
【发布时间】:2019-07-22 14:31:22
【问题描述】:

当尝试向包含行的 Altair 条形图添加标签时,我收到 SchemaValidationError。我说的是这样的标签: https://altair-viz.github.io/gallery/bar_chart_with_labels.html

我说的是带有行的条形图或“水平分组条形图”,如下所示: https://altair-viz.github.io/gallery/grouped_bar_chart_horizontal.html

这是不起作用的代码:

from vega_datasets import data

source = data.barley()

bars = alt.Chart(source).mark_bar().encode(
    x='sum(yield):Q',
    y='year:O',
    row='variety:N',
)
bars

text = bars.mark_text(
    align='left',
    baseline='middle',
    dx=3  # Nudges text to right so it doesn't appear on top of the bar
).encode(
    text='sum(yield):Q'
)

bars + text

如果我删除条形图中的行选项,它会按预期工作:

bars = alt.Chart(source).mark_bar().encode(
    x='sum(yield):Q',
    y='year:O'
)
bars

text = bars.mark_text(
    align='left',
    baseline='middle',
    dx=3  # Nudges text to right so it doesn't appear on top of the bar
).encode(
    text='sum(yield):Q'
)

bars + text

将行添加到 'mark_text' 方法也无济于事...

最后,我希望看到条形右侧的标签,如下所示: https://imgur.com/KFJtNkb

【问题讨论】:

    标签: python python-3.x jupyter-notebook altair


    【解决方案1】:

    您的代码 sn-p 的错误是

    ValueError: Faceted charts cannot be layered.
    

    一般来说,不能保证两个分面图会有匹配的分面,可以分层,所以 Vega-Lite 不允许分面图分层。

    解决此问题的方法是对分层图表进行分面,而不是对分面图表进行分层。例如:

    import altair as alt
    from vega_datasets import data
    
    source = data.barley()
    
    bars = alt.Chart(source).mark_bar().encode(
        x='sum(yield):Q',
        y='year:O',
    )
    bars
    
    text = bars.mark_text(
        align='left',
        baseline='middle',
        dx=3  # Nudges text to right so it doesn't appear on top of the bar
    ).encode(
        text='sum(yield):Q'
    )
    
    (bars + text).facet(row='variety:N')
    

    【讨论】:

    • 对不起,我太快了。您的代码不起作用:(。我仍然收到与我已经报告的相同的错误。
    • 确保您使用的是 Altair 3.1 或更高版本。在旧版本中,必须以不同方式指定数据。
    • 如果由于某种原因您不能使用最新版本的 Altair,则将 source 作为 alt.Chart() 的参数删除,并将其作为 facet 的参数:facet(row='variety:N', data=source)
    • 感谢您的提示!使用 altair 3.1 它可以工作:)
    • 如果你想按照 1931 年的产量总和对上面的图表进行排序,这样行的顺序就是 Trebi, Wisconsin N. 38, No. 457,你会怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多