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

如何在Altair中设置单个散点标记的实际大小

问题原因

你原有代码存在两处配置错误:

  1. 错误使用alt.StrokeWidth控制散点大小,散点标记的尺寸应该通过alt.Size编码通道配置
  2. 给point_size字段追加了:N后缀,强制将数值型的大小参数识别为分类变量,导致无法实现线性映射的大小控制

修改方案

将encode中的size配置替换为alt.Size,指定字段为定量类型(后缀:Q),可通过scale参数调整大小映射范围,和matplotlib的缩放逻辑对齐,修改后的函数如下:

def plot_points_altair(data):
  fig = alt.Chart(data[data.point_size>0]).mark_point(filled=True).encode(
      x=alt.X('x'),
      y=alt.Y('y'),
      size=alt.Size('point_size:Q', scale=alt.Scale(range=[20, 200]))
  )
  return fig

参数说明

  • 可自行调整scale.range的两个端点数值,实现和matplotlib中s=data['point_size']*50完全一致的缩放效果,数值越大对应生成的点尺寸越大
  • 如果你需要point_size的数值直接对应实际的像素大小,不需要额外缩放,可以将scale配置改为alt.Scale(type='identity'),point_size的数值会直接作为点的像素大小使用

效果参考

原有matplotlib实现效果:
matplotlib实现效果
原有错误Altair实现效果:
原错误Altair效果
修改后可实现和matplotlib完全一致的散点大小控制效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 19:15:05