如何在Altair中设置单个散点标记的实际大小
问题原因
你原有代码存在两处配置错误:
- 错误使用
alt.StrokeWidth控制散点大小,散点标记的尺寸应该通过alt.Size编码通道配置 - 给
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实现效果:
原有错误Altair实现效果:
修改后可实现和matplotlib完全一致的散点大小控制效果。
内容的提问来源于stack exchange,提问作者Don
相关产品推荐
相关产品推荐

