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

基于Altair实现机场关联交互式时序可视化改造请求

改造Altair机场可视化:添加年份滑块与自定义气泡大小

我来帮你搞定这个需求!结合你的数据结构和要求,我调整了原画廊示例的代码,实现了年份滑块交互,并且把气泡大小绑定到你的size字段上。下面是完整代码和关键细节说明:

完整实现代码

import altair as alt
from vega_datasets import data
import pandas as pd

# 加载你的数据(这里模拟你的DataFrame结构,实际替换成你的数据加载逻辑即可)
df = pd.DataFrame([
    ["RKPC", 1.00, 126.49, 33.51, 2017],
    ["RKSS", 0.88, 126.79, 37.55, 2017],
    ["ZGSZ", 0.43, 113.81, 22.63, 2017],
    ["RJTT", 0.43, 139.77, 35.55, 2017],
    ["VHHH", 0.38, 113.91, 22.30, 2017],
    ["YBLA", 0.76, 146.00, -36.55, 2018],
    ["YCOM", 0.52, 148.97, -36.30, 2018],
    ["YPCC", 0.22, 96.83, -12.18, 2018],
    ["YWGT", 0.12, 146.30, -36.41, 2018],
    ["ZBNY", 0.03, 116.38, 39.78, 2018]
], columns=["icao", "size", "longitude", "latitude", "year"])

# 获取美国地图拓扑数据(如果你的机场不限于美国,可替换为全球投影)
states = alt.topo_feature(data.us_10m.url, feature="states")

# 创建年份滑块选择器
year_slider = alt.selection_single(
    name="选择年份",
    fields=["year"],
    init={"year": df["year"].min()},  # 默认选中数据中的最早年份
    bind=alt.binding_range(
        min=df["year"].min(), 
        max=df["year"].max(), 
        step=1,
        label="年份:"
    )
)

# 背景地图层
background = alt.Chart(states).mark_geoshape(
    fill="#f0f0f0",
    stroke="#ffffff"
).properties(
    width=750,
    height=500
).project("albersUsa")  # 美国专属投影,全球展示可改用"equirectangular"

# 机场气泡图层
airport_bubbles = alt.Chart(df).mark_circle(
    opacity=0.8,
    color="#2196F3"
).encode(
    latitude="latitude:Q",
    longitude="longitude:Q",
    # 绑定自定义size字段到气泡大小,可按需调整缩放范围
    size=alt.Size(
        "size:Q",
        scale=alt.Scale(range=[20, 1200]),
        title="机场规模"
    ),
    # 自定义悬浮提示信息
    tooltip=[
        alt.Tooltip("icao:N", title="ICAO代码"),
        alt.Tooltip("size:Q", title="规模", format=".2f"),
        alt.Tooltip("year:Q", title="统计年份")
    ]
).add_selection(
    year_slider
).transform_filter(
    year_slider  # 根据滑块选择实时过滤对应年份的数据
)

# 组合所有图层并展示
final_chart = (background + airport_bubbles).configure_view(stroke=None)
final_chart.show()

关键调整说明

  1. 年份交互滑块:

    • 用alt.selection_single配合bind=alt.binding_range创建了可拖动的年份滑块,自动适配你数据中的年份范围
    • 通过transform_filter(year_slider)实现数据实时过滤,切换年份时气泡会自动更新
  2. 气泡大小自定义:

    • 直接将你的size字段映射到size编码,替换了原示例中基于航线数量的聚合计算
    • 通过alt.Scale(range=[20, 1200])调整气泡大小范围,你可以根据实际数据分布修改这个区间
  3. 数据源适配:

    • 直接使用你的DataFrame字段(icao、size、经纬度、year),不需要原示例中的lookup关联逻辑
    • 保留了地图背景,若需全球范围展示,可把投影从albersUsa改成equirectangular

如果你的数据中还包含机场间的连接关系(比如航线数据),想要保留原示例中的关联线效果,随时告诉我你的连接数据结构,我再帮你补充这部分逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:12:59