You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Streamlit中使用Altair绘图:如何添加图例?

在Streamlit中为Altair多线条图表添加图例

要给Altair绘制的多线条图表添加图例,核心是让线条的类别成为数据的一个维度,并映射到color编码——这是Altair生成图例的标准方式,无需额外复杂设置。以下是两种常见场景的解决方案:

场景1:所有线条使用相同插值方式

把多条线的数据合并成**长格式(long-form)**数据,新增一个标记线条类别的列,再通过color映射该列自动生成图例:

import streamlit as st
import altair as alt
import pandas as pd
import numpy as np

# 生成基础数据
x = np.linspace(0, 10, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)

# 整理成长格式数据:将多条线的y值合并,新增"线条名称"列区分
df = pd.DataFrame({
    'x': np.tile(x, 2),  # 重复x轴数据两次
    'y': np.concatenate([y_sin, y_cos]),
    '线条名称': ['正弦曲线'] * 100 + ['余弦曲线'] * 100
})

# 绘制图表,color映射到"线条名称"列自动生成图例
chart = alt.Chart(df).mark_line(interpolate='linear').encode(
    x='x',
    y='y',
    # 设置color编码,指定标题和数据类型(N表示标称型)
    color=alt.Color('线条名称:N', title='线条类型')
)

st.altair_chart(chart, use_container_width=True)

场景2:不同线条使用不同插值方式

如果每条线需要单独设置插值参数(比如一条用linear,一条用basis),可以保留多图层结构,通过虚拟类别列+共享颜色比例尺来生成图例:

import streamlit as st
import altair as alt
import pandas as pd
import numpy as np

x = np.linspace(0, 10, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)

df_sin = pd.DataFrame({'x': x, 'y': y_sin})
df_cos = pd.DataFrame({'x': x, 'y': y_cos})

# 定义共享的颜色比例尺:指定每个线条的名称和对应颜色
color_scale = alt.Scale(
    domain=['正弦曲线', '余弦曲线'],
    range=['#2c7fb8', '#d95f02']
)

# 第一个图层:设置插值+虚拟类别列,显示图例
chart_sin = alt.Chart(df_sin).mark_line(interpolate='linear').encode(
    x='x',
    y='y',
    color=alt.Color(
        '线条名称:N',
        scale=color_scale,
        legend=alt.Legend(title='线条类型')
    )
).transform_calculate(线条名称='"正弦曲线"')  # 生成虚拟类别列

# 第二个图层:设置不同插值+虚拟类别列,隐藏重复图例
chart_cos = alt.Chart(df_cos).mark_line(interpolate='basis').encode(
    x='x',
    y='y',
    color=alt.Color(
        '线条名称:N',
        scale=color_scale,
        legend=None  # 不重复显示图例
    )
).transform_calculate(线条名称='"余弦曲线"')

# 合并两个图层
chart = chart_sin + chart_cos

st.altair_chart(chart, use_container_width=True)

关键说明

  • Altair的图例依赖**编码(encoding)**而非单独的样式设置,因此必须将线条的类别映射到color(或其他视觉属性)才能生成图例。
  • 长格式数据是Altair推荐的输入格式,比单独绘制多图层更易维护和扩展。

内容的提问来源于stack exchange,提问作者amw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:45:21