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

如何为使用alt.condition筛选值的Altair图表添加图例?

解决Altair矩形图图例缺失问题

问题原因

使用alt.condition配合alt.value直接指定颜色时,Altair无法生成图例——因为图例需要基于数据字段与颜色的映射关系,而非固定颜色值。

解决方案

将条件判断转化为新的数据字段,再通过该字段映射颜色,具体步骤:

  • 用transform_calculate创建新字段,标记目标特征是否为1
  • 将color编码绑定到新字段,并指定对应的颜色映射
  • 可选:自定义图例名称、样式

修正后的代码示例

import altair as alt
import pandas as pd

toy = pd.DataFrame(
    {'Bushes':[0,0,1,1,0], 'Trees': [1,1,0,0,0],
     'Lake':[0,0,0,0,1], 'x': [1,3,-1,4,2],
     'y': [2,0,-2,1,3]}
)

# 指定目标特征列(替换为你需要的Bushes/Trees/Lake)
key = 'Bushes'

rect = alt.Chart(toy).mark_rect(height=25, width=25).encode(
    alt.X('x', axis=None),
    alt.Y('y', axis=None),
    color=alt.Color('is_key:N',  # 绑定到新的分类字段
                   scale=alt.Scale(domain=[f'{key} Present', f'{key} Absent'],
                                   range=['red', 'lightgray']),
                   title=key)  # 图例标题
).transform_calculate(
    # 创建新字段,根据目标特征值生成可读标签
    is_key=alt.condition(alt.datum[key] == 1, 
                         alt.value(f'{key} Present'), 
                         alt.value(f'{key} Absent'))
)

rect.show()

关键说明

  • transform_calculate生成的新字段是分类类型(N代表Nominal),Altair会自动为分类字段生成图例
  • 通过alt.Scale明确指定每个分类对应的颜色,确保和你的需求一致
  • 如果需要同时展示多个特征的图例,可以考虑将数据宽表转长表后再绘制,这样能统一管理多特征的颜色映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:28:10