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

如何在Altair中将tooltip的字段名替换为字典对应自定义标签

解决方法

分两种常见场景,按需选择即可:

场景1:需要映射的是字段值(某一列的内容是Q1r1这类编码,要把显示的内容替换为对应标签)

方法1:在Altair转换层处理(无需修改原数据集)

直接用transform_calculate把Python字典转成Vega可识别的对象做匹配,示例代码:

import altair as alt
import json

codes = {
    "Q1r1" : "first", 
    "Q1r2" : "second", 
    "Q1r3" : "third", 
    "Q1r4" : "etc...", 
}

# 将Python字典转成Vega表达式支持的JSON对象
codes_js = json.dumps(codes)

alt.Chart(df).mark_point().encode(
    x='x:Q',
    y='y:Q',
    size='z:Q',
    color=alt.Color('group:N'),
    # 直接用转换后生成的标签字段
    tooltip=['group:N', 'field_label:N']
).transform_calculate(
    # 按字段值匹配对应的显示标签
    field_label = f"{codes_js}[datum.field]"
)

方法2:提前在Pandas层处理(逻辑更简单、性能更好)

直接用Pandas的map方法生成映射后的字段,再传入Altair:

# 提前在数据集里生成映射好的标签字段
df['field_label'] = df['field'].map(codes)

alt.Chart(df).mark_point().encode(
    x='x:Q',
    y='y:Q',
    size='z:Q',
    color=alt.Color('group:N'),
    tooltip=['group:N', 'field_label:N']
)

场景2:需要映射的是字段名(列名本身是Q1r1这类编码,要修改tooltip里的字段标题)

直接用alt.Tooltip的title参数指定显示名即可,单个字段写法:

alt.Chart(df).mark_point().encode(
    x='x:Q',
    y='y:Q',
    size='z:Q',
    color=alt.Color('group:N'),
    tooltip=['group:N', alt.Tooltip('Q1r1:N', title=codes['Q1r1'])]
)

如果有多个字段需要批量处理,用列表推导式生成tooltip配置即可:

# 你需要在tooltip里展示的所有字段名
tooltip_fields = ['group', 'Q1r1', 'Q1r2', 'Q1r3']
tooltip = [
    alt.Tooltip(f"{field}:N", title=codes.get(field, field)) 
    for field in tooltip_fields
]

alt.Chart(df).mark_point().encode(
    x='x:Q',
    y='y:Q',
    size='z:Q',
    color=alt.Color('group:N'),
    tooltip=tooltip
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:15:03