簡體   English   中英

Altair 用於機場之間連接的交互圖(時間序列)

[英]Altair for interactive plot of connections among airports (time series)

我是 altair 的新手,我正在嘗試將 altair 畫廊Connections Within US Airports Interactive 中的這個情節改編成一個時間序列。

數據幀如下,其中每個機場由其 ICAO 代碼標識。 這個想法是讓一個交互式滑塊在年份之間移動,而氣泡大小隨“大小”變量的值而不是不同機場之間的連接數而變化。

        icao        size    longitude   latitude    year
0       RKPC        1.00    126.49      33.51       2017
1       RKSS        0.88    126.79      37.55       2017
2       ZGSZ        0.43    113.81      22.63       2017
3       RJTT        0.43    139.77      35.55       2017
4       VHHH        0.38    113.91      22.30       2017
... ... ... ... ... ... ... ...
2486    YBLA        0.76    146.00     -36.55       2018
2487    YCOM        0.52    148.97     -36.30       2018
2488    YPCC        0.22    96.83      -12.18       2018
2489    YWGT        0.12    146.30     -36.41       2018
2490    ZBNY        0.03    116.38      39.78       2018

以下代碼來自之前引用的示例。

import altair as alt
from vega_datasets import data

# Since these data are each more than 5,000 rows we'll import from the URLs
airports = data.airports.url
flights_airport = data.flights_airport.url

states = alt.topo_feature(data.us_10m.url, feature="states")

# Create mouseover selection
select_city = alt.selection_single(
    on="mouseover", nearest=True, fields=["origin"], empty="none"
)

# Define which attributes to lookup from airports.csv
lookup_data = alt.LookupData(
    airports, key="iata", fields=["state", "latitude", "longitude"]
)

background = alt.Chart(states).mark_geoshape(
    fill="lightgray",
    stroke="white"
).properties(
    width=750,
    height=500
).project("albersUsa")

connections = alt.Chart(flights_airport).mark_rule(opacity=0.35).encode(
    latitude="latitude:Q",
    longitude="longitude:Q",
    latitude2="lat2:Q",
    longitude2="lon2:Q"
).transform_lookup(
    lookup="origin",
    from_=lookup_data
).transform_lookup(
    lookup="destination",
    from_=lookup_data,
    as_=["state", "lat2", "lon2"]
).transform_filter(
    select_city
)

points = alt.Chart(flights_airport).mark_circle().encode(
    latitude="latitude:Q",
    longitude="longitude:Q",
    size=alt.Size("routes:Q", scale=alt.Scale(range=[0, 1000]), legend=None),
    order=alt.Order("routes:Q", sort="descending"),
    tooltip=["origin:N", "routes:Q"]
).transform_aggregate(
    routes="count()",
    groupby=["origin"]
).transform_lookup(
    lookup="origin",
    from_=lookup_data
).transform_filter(
    (alt.datum.state != "PR") & (alt.datum.state != "VI")
).add_selection(
    select_city
)

(background + connections + points).configure_view(stroke=None)

感謝您的幫助。

您可以按照US Population Over Time 中的示例,使用Filter Transform執行此操作。 您的數據可能如下所示:

slider = alt.binding_range(min=2017, max=2018, step=1)
select_year = alt.selection_single(name="year", fields=['year'],
                                   bind=slider, init={'year': 2017})

points = alt.Chart(data).mark_circle().encode(
    latitude="latitude:Q",
    longitude="longitude:Q",
    size='size:Q'
).transform_filter(
    select_year
).add_selection(
    select_year
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM