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

Altair-Python小提琴图tooltip名称字段显示undefined问题

问题根因

transform_density属于聚合转换操作,执行时仅会保留groupby参数声明的分组字段,以及转换生成的Rate、density字段,原始数据集中的Name字段会在转换环节被直接丢弃,因此无论怎么调整tooltip的字段书写格式,都无法读取到对应值,才会持续显示undefined。该问题和Name字段本身的object类型无关,之前触发的字段类型报错,本质是转换后的数据集中根本不存在Name字段。

修复方案

不要直接在密度面积图层上绑定原始电影字段的tooltip,采用双层图层叠加的方式实现效果:

  • 底层保留原有水平密度面积图,作为小提琴图的可视化主体,不需要给该层绑定原始字段类的tooltip
  • 上层叠加完全透明的原始数据点层,将tooltip绑定在该点层上,鼠标悬浮到小提琴图对应评分位置时,会自动触发对应电影的信息展示,透明点不会破坏原有小提琴图的视觉效果

可直接运行的修复后代码如下:

import altair as alt

# 底层:小提琴图密度主体
violin_main = alt.Chart(data_trim).transform_density(
    'Rate',
    as_=['Rate', 'density'],
    extent=[0, 10],
    groupby=['Genre_rename']
).mark_area(orient='horizontal').encode(
    y=alt.Y('Rate:Q', scale=alt.Scale(domain=[0, 10])),
    color=alt.Color("Genre_rename", scale=alt.Scale(scheme="rainbow")),
    x=alt.X(
        'density:Q',
        stack='center',
        impute=None,
        title=None,
        axis=alt.Axis(labels=False, values=[0], grid=True, ticks=True),
    ),    
    column=alt.Column(
        'Genre_rename:N',
        header=alt.Header(
            titleOrient='bottom',
            labelOrient='bottom',
            labelPadding=0,
        )
    )
).properties(
    width=100
)

# 上层:透明触发层,专门承载tooltip交互
tooltip_trigger = alt.Chart(data_trim).mark_point(opacity=0, size=12).encode(
    y='Rate:Q',
    # 固定点在每个分面的水平中心位置,匹配小提琴居中的布局
    x=alt.value(50),
    column='Genre_rename:N',
    tooltip=[
        alt.Tooltip("Name:N", title="电影名称"),
        alt.Tooltip("Rate:Q", title="评分", format=".1f")
    ]
).properties(
    width=100
)

# 合并图层,保留原有全局样式配置
plot = alt.layer(violin_main, tooltip_trigger).configure_facet(
    spacing=0
).configure_view(
    stroke=None
)
plot

补充说明:如果需要悬浮时展示同一评分位置的所有电影名称,可以将tooltip中的Name字段配置修改为alt.Tooltip("Name:N", title="电影列表", aggregate="values"),会自动聚合同位置的所有名称批量展示,不会仅返回单条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:36:24