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

Altair分面图表中合并图例的实现问题

解决Altair分面网格图例重复显示问题

问题说明

合并两个拥有共同X轴和分面字段的DataFrame后,绘制分面网格图表时,每个子图都会重复显示两个颜色图例,需要将两个图例统一放在分面侧边仅显示一次。

修改后代码

import pandas as pd
import altair as alt

df1 = pd.DataFrame({'x':[1,2,3,1,2,3,1,2,3],
                    'y1':[6,7,8,1,3,5,9,8,7],
                    'cat':['A','A','A','B','B','B','C','C','C'],
                    'E1':[120,120,120,200,200,200,80,80,80]})

df2 = pd.DataFrame({'x':[1,2,3,4,1,2,3,4,1,2,3,4,5],
                    'y2':[6,8,8,9,2,4,6,8,9,7,5,4,3],
                    'cat':['A','A','A','A','B','B','B','B','C','C','C','C','C'],
                    'E2':[2,1,3,2,1,1,3,2,3,2,2,2,3]})

merged = pd.merge(df2, df1, how='outer', on=['cat','x'])

p1 = alt.Chart(merged).mark_line().encode(
    x='x:Q',
    y='y1:Q',
    color=alt.Color('E1:Q', scale=alt.Scale(scheme='viridis'), bin=alt.Bin(maxbins=5))
)

p2 = alt.Chart(merged).mark_circle().encode(
    x='x:Q',
    y='y2:Q',
    color=alt.Color('E2:N', scale=alt.Scale(domain=[1,2,3], range=['black','red','blue']))
)

alt.layer(p1, p2).facet(
    'cat:N'
).resolve_legend(
    color='shared'
).configure_legend(
    orient='right'
)

关键修改说明

  • resolve_legend(color='shared'):指定颜色图例在所有分面子图中共享,避免每个子图重复渲染图例。
  • configure_legend(orient='right'):将图例固定在分面右侧,也可改为orient='left'放在左侧,满足侧边显示的需求。

如果需要优化图例样式,可在configure_legend中添加参数,比如设置标题字体大小titleFontSize=12、标签字体大小labelFontSize=10等,调整布局更贴合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:20:33