在altair的layerd图表中添加图例

2024-06-11 22:12:51 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑下面的例子:

    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))altair只添加了一个图例,如果在编码中,您设置颜色大小左右,通常带有一个分类列,但这在这里是不可能的,因为我正在绘制整个列,标签应该是列名(现在显示在y轴标签中)


Tags: importdfdatadatelinechartminalt
2条回答

我会做一个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'
)

enter image description here

如果将两个具有相同列的图表分层,并告诉它们使用相同的列着色,则将显示图例。不知道这是否有帮助,但是

例如,我有:


范围、数量、类型

0_5,3,“私人”

5_10,5,“私人”


范围、数量、类型

0_5,3,“公共”

5_10,5“公共”


我用“color=”Type“和alt.layer(chart1,chart2)绘制了两个图表,它显示了一个合适的图例

相关问题 更多 >