如何增大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
相关产品推荐
相关产品推荐

