【问题标题】:Adding legend to layerd chart in altair在 altair 中向分层图表添加图例
【发布时间】:2020-06-28 01:24:28
【问题描述】:

考虑以下示例:

    import altair as alt
    from vega_datasets import data

    df = data.seattle_weather()

    temp_max = alt.Chart(df).mark_line(color='blue').encode(
        x='yearmonth(date):T',
        y='max(temp_max)',
    )

    temp_min = alt.Chart(df).mark_line(color='red').encode(
        x='yearmonth(date):T',
        y='max(temp_min)',
    )

    temp_max + temp_min

在结果图表中,我想添加一个图例,显示蓝线显示最高温度,红线显示最低温度。实现这一目标的最简单方法是什么?

我看到(例如在这个问题的解决方案中:Labelling Layered Charts in Altair (Python))如果在编码中设置了 colorsize 或因此,通常使用分类列,但这在这里是不可能的,因为我正在绘制整个列,并且标签应该是列名(现在显示在 y 轴标签中)。

【问题讨论】:

    标签: python legend altair


    【解决方案1】:

    我会做一个fold transform 以便可以正确编码变量。

    import altair as alt
    from vega_datasets import data
    
    df = data.seattle_weather()
    
    alt.Chart(df).mark_line().transform_fold(
        fold=['temp_max', 'temp_min'], 
        as_=['variable', 'value']
    ).encode(
        x='yearmonth(date):T',
        y='max(value):Q',
        color='variable:N'
    )
    

    【讨论】:

    • 可以用分层图表做到这一点吗?当数据在同一个数据框中时,建议的方法有效,但情况并非总是如此。
    • @Karim 如果不指定图例将代表的编码,就无法添加图例。这个问题在这里进一步讨论github.com/altair-viz/altair/issues/984
    【解决方案2】:

    如果您将两个具有相同列的图表分层并告诉它们按相同的列着色,则将出现图例。不知道这是否有帮助,但是..

    例如,我有:


    范围、数量、类型

    0_5, 3, '私人'

    5_10, 5, '私人'


    范围、数量、类型

    0_5, 3, '公共'

    5_10, 5, '公共'


    我用 'color = 'Type'' 绘制了两个图表,并说 alt.layer(chart1, chart2),它向我展示了一个正确的图例

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 2022-08-18
      • 2020-07-23
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 2020-03-01
      相关资源
      最近更新 更多