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

如何在Altair中为筛选后的散点图添加动态点数标签?

在Altair筛选图表中动态显示数据点数

当然可以实现动态显示筛选后的数据点数,你只需要在原有图表基础上,添加一个基于相同选择器的文本标记图表,实时计算并展示筛选后的数量。以下是基于你提供的官方示例修改后的完整代码:

import altair as alt
from vega_datasets import data

cars = data.cars()

click = alt.selection_point(encodings=['color'])

# 原散点图,保持筛选逻辑
scatter = alt.Chart(cars).mark_point().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q',
    color='Origin:N'
).transform_filter(
    click
)

# 动态计数文本图表
count_text = alt.Chart(cars).mark_text(
    align='right',
    baseline='top',
    fontSize=14,
    color='black'
).transform_filter(
    click  # 复用相同的筛选选择器
).transform_aggregate(
    count='count()',  # 计算筛选后的数据点数量
).encode(
    x=alt.value(480),  # 调整x位置,适配图表宽度
    y=alt.value(10),   # 调整y位置,放在图表顶部
    text=alt.Text('count:Q', format='筛选后点数: {}')  # 格式化显示文本
)

# 原条形图,保持交互逻辑
hist = alt.Chart(cars).mark_bar().encode(
    x='count()',
    y='Origin',
    color=alt.condition(click, 'Origin', alt.value('lightgray'))
).add_params(
    click
)

# 组合所有图表:散点图+计数文本 放在上方,条形图在下方
(scatter + count_text) & hist

关键说明:

  • 复用选择器:计数文本图表和散点图使用同一个click选择器,确保筛选逻辑完全同步
  • 动态聚合计算:通过transform_aggregate(count='count()')实时计算筛选后的数据集行数,替代静态提前计算的方式
  • 文本定位:用alt.value()手动设置文本的x/y坐标,你可以根据自己的图表尺寸调整数值,让计数显示在合适的位置(比如右上角、左上角)

如果你希望把计数放在图表外部(比如单独的文本块),也可以用类似的逻辑,只需要调整文本图表的位置参数,或者将其与其他元素单独组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:36