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

如何自定义Altair多Tooltip:按值排序及隐藏特定值项

解决Altair Tooltip自定义需求的实现方案

针对你提出的两个Tooltip自定义需求,以下是具体的实现代码和步骤说明:

完整代码

import altair as alt
from vega_datasets import data

source = data.stocks()
base = alt.Chart(source).encode(x='date:T')
columns = sorted(source.symbol.unique())
selection = alt.selection_point(fields=['date'], nearest=True, on='mouseover', empty=False, clear='mouseout')

lines = base.mark_line().encode(y='price:Q', color='symbol:N')
points = lines.mark_point().transform_filter(selection)

rule = base.transform_pivot(
    'symbol', value='price', groupby=['date']
).transform_fold(
    columns, as_=['symbol', 'price']
).transform_filter(
    alt.datum.price.is_valid()
).transform_calculate(
    entry=alt.expr({
        'name': alt.datum.symbol,
        'value': alt.datum.price,
        'sort': -alt.datum.price
    })
).transform_window(
    sorted_entries='collect(entry)',
    sort=[alt.SortField('sort', order='ascending')],
    groupby=['date']
).transform_calculate(
    tooltip=alt.expr.concat(
        [{'name': 'Date', 'value': alt.expr.timeFormat(alt.datum.date, '%b %Y')}],
        alt.datum.sorted_entries
    )
).mark_rule().encode(
    opacity=alt.condition(selection, alt.value(0.3), alt.value(0)),
    tooltip=alt.Tooltip('tooltip:N', format='', content='custom')
).add_params(selection)

lines + points + rule

关键步骤说明

  1. 宽表与长表转换

    • transform_pivot:将原始长格式数据转为宽格式,每个日期对应各股票的价格列
    • transform_fold:再将宽格式转回长格式,让每个日期+股票+价格成为单独一行,方便后续过滤和排序
  2. 隐藏NaN值条目

    • transform_filter(alt.datum.price.is_valid()):直接过滤掉价格为NaN的行,Tooltip中不会再显示无效值的条目
  3. 自定义排序逻辑

    • transform_calculate:为每个股票条目生成包含排序键的对象,用-alt.datum.price作为排序键,实现价格降序排列
    • transform_window:按日期分组,将每个日期下的股票条目按排序键升序排列(等价于价格降序),收集为有序数组
  4. 构建最终Tooltip结构

    • transform_calculate:手动将日期条目放在数组首位,拼接排序后的股票条目数组,确保日期始终在Tooltip顶部
    • tooltip=alt.Tooltip('tooltip:N', format='', content='custom'):启用自定义Tooltip内容,让Altair按我们构建的数组渲染条目

内容的提问来源于stack exchange,提问作者Saint-malo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:13:17