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

如何在Altair图表的Tooltip中显示当前悬停点的分数?

解决Altair悬停Tooltip不显示分数的问题

问题根源

报错的核心原因是数据结构与编码字段不匹配:如果你的数据是宽格式(比如包含cook1_score、cook2_score两个独立列),直接引用不存在的_score列会导致Altair无法识别;如果是长格式(用一列区分厨师,一列存分数),则可能是编码时未明确指定字段类型,导致Altair无法自动推断。

具体解决方案

根据两种常见的数据结构分别处理:

情况1:数据为宽格式(每列对应一个厨师的分数)

假设你的数据结构如下:

dishcook1_scorecook2_scoreingredient1ingredient2
18590食材A食材B
29288食材C食材D

此时需先通过transform_fold将宽格式转为长格式,再绑定Tooltip字段:

import altair as alt
import pandas as pd

# 示例数据
data = pd.DataFrame({
    'dish': [1,2,3,4],
    'cook1_score': [85,92,78,95],
    'cook2_score': [90,88,91,87],
    'ingredient1': ['A','C','E','G'],
    'ingredient2': ['B','D','F','H']
})

chart = alt.Chart(data).mark_point(size=100).encode(
    x=alt.X('dish:O', title='菜品编号'),
    y=alt.Y('value:Q', title='分数'),
    color=alt.Color('cook:N', title='厨师'),
    # 绑定转换后的字段,明确类型
    tooltip=[
        alt.Tooltip('dish:O', title='菜品'),
        alt.Tooltip('cook:N', title='厨师'),
        alt.Tooltip('value:Q', title='分数', format='.1f')
    ]
).transform_fold(
    # 转换宽格式为长格式,定义厨师列和分数列名称
    fold=['cook1_score', 'cook2_score'],
    as_=['cook', 'value']
)

chart.show()

情况2:数据为长格式(一列区分厨师,一列存分数)

假设数据结构如下:

dishcookscoreingredient1ingredient2
1cook185食材A食材B
1cook290食材A食材B

此时直接绑定score字段并明确类型即可:

import altair as alt
import pandas as pd

# 示例数据
data = pd.DataFrame({
    'dish': [1,1,2,2,3,3,4,4],
    'cook': ['cook1','cook2']*4,
    'score': [85,90,92,88,78,91,95,87],
    'ingredient1': ['A','A','C','C','E','E','G','G'],
    'ingredient2': ['B','B','D','D','F','F','H','H']
})

chart = alt.Chart(data).mark_point(size=100).encode(
    x=alt.X('dish:O', title='菜品编号'),
    y=alt.Y('score:Q', title='分数'),
    color=alt.Color('cook:N', title='厨师'),
    # 直接绑定存在的score字段,指定类型
    tooltip=[
        alt.Tooltip('dish:O', title='菜品'),
        alt.Tooltip('cook:N', title='厨师'),
        alt.Tooltip('score:Q', title='分数', format='.1f')
    ]
)

chart.show()

核心注意事项

  • Tooltip引用的字段**必须存在于当前数据(或转换后的数据)**中,避免引用不存在的列
  • 所有编码字段需明确指定类型::O(有序分类)、:N(名义分类)、:Q(定量)、:T(时间),防止Altair无法推断类型报错
  • 宽格式数据优先转成长格式处理,能大幅简化字段编码逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:57:58