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

如何增大Altair中Circle标记的绝对最大尺寸?

解决绝对调整最大Circle面积的问题

要实现将最大机场数对应的Circle半径从1em改为2em(绝对面积,非相对缩放),可以通过计算变换直接生成对应面积值,而非依赖Size/Scale设置,步骤如下:

  • 先计算全局最大机场数量,以此为基准确定每个数据点的绝对面积
  • 利用圆面积公式 面积=π×半径²,将最大半径2em转换为对应面积,再按数据比例分配给每个点
  • 在编码中关闭scale,直接使用计算出的面积值

示例代码

import altair as alt
from vega_datasets import data

airports = data.airports.url
states = data.us_10m.url

# 绘制地图背景
background = alt.Chart(states).mark_geoshape(
    fill='lightgray',
    stroke='white'
).properties(
    width=500,
    height=300
).project('albersUsa')

# 绘制比例圆点
points = alt.Chart(airports).transform_aggregate(
    count='count()',
    groupby=['state']
).transform_joinaggregate(
    # 计算全局最大机场数量
    max_count='max(count)',
).transform_calculate(
    # 计算每个点的绝对面积:最大面积对应半径2em的圆,其他点按比例缩放
    size='(datum.count / datum.max_count) * Math.PI * Math.pow(2, 2)'
).mark_circle().encode(
    longitude='longitude:Q',
    latitude='latitude:Q',
    # 关闭scale,直接使用计算出的面积值
    size=alt.Size('size:Q', scale=None, title='机场数量'),
    color=alt.value('steelblue'),
    tooltip=['state:N', 'count:Q']
)

# 组合图层
background + points

关键说明

  • transform_joinaggregate 用于获取全局最大机场数,确保比例计算的基准统一
  • transform_calculate 中的公式保证最大数据点的面积对应半径2em的圆(面积=π×2²),其他点按数据占比同步缩放面积
  • 设置 scale=None 禁用自动缩放,强制使用计算出的绝对面积值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:06