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

垂直拼接两个Altair图表时如何避免图例合并?

问题:Altair垂直拼接图表时阻止图例合并

当执行msft_plot & all_plot垂直拼接两个图表时,两个图表的图例被自动合并,如何让每个图表保留独立的图例?

解决方案

有两种常用方法可以实现:

方法1:为每个图表的颜色图例设置不同标题

通过给两个图表的color编码指定不同的图例标题,让Altair识别为不同的图例,从而避免合并:

import altair as alt
from vega_datasets import data
import polars as pl

# 为数据添加年份列
source = pl.from_pandas(data.stocks()).with_columns(year=pl.col.date.dt.year())

# MSFT专属图表:设置图例标题为“年份”
msft_plot = (
    alt.Chart(source.filter(pl.col.symbol.eq("MSFT")))
    .mark_line()
    .encode(
        x="date:T", 
        y="price:Q", 
        color=alt.Color("year:O", legend=alt.Legend(title="年份"))
    )
)

# 全公司图表:设置图例标题为“公司”
all_plot = (
    alt.Chart(source)
    .mark_line()
    .encode(
        x="date:T", 
        y="price:Q", 
        color=alt.Color("symbol:N", legend=alt.Legend(title="公司"))
    )
)

# 垂直拼接图表
msft_plot & all_plot

方法2:强制分离颜色比例尺

在拼接图表时,使用resolve_scale(color='independent')告诉Altair不要共享颜色比例尺,这样两个图表的图例会独立显示:

import altair as alt
from vega_datasets import data
import polars as pl

# 为数据添加年份列
source = pl.from_pandas(data.stocks()).with_columns(year=pl.col.date.dt.year())

# MSFT专属图表
msft_plot = (
    alt.Chart(source.filter(pl.col.symbol.eq("MSFT")))
    .mark_line()
    .encode(x="date:T", y="price:Q", color="year:O")
)

# 全公司图表
all_plot = (
    alt.Chart(source)
    .mark_line()
    .encode(x="date:T", y="price:Q", color="symbol:N")
)

# 垂直拼接并设置颜色比例尺独立
(msft_plot & all_plot).resolve_scale(color='independent')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:23:22