带散点图的 Altair 链接地图

Altair linked map with scatter plot

我正在尝试创建一个类似于示例 here and here 的链接图。我想要一侧的散点图和另一侧的地理地图。散点图中的点将显示为地图上相应地理位置上的点。一旦我 select 散点图上的几个点,我只想在地图上看到这些点,反之亦然。但是,无法完成它。

我认为问题出在基数上,或者这些图的 x 轴和 y 轴中使用的值。散点图的基础仅使用值(数据框,两个数字列 selected),而地理地图具有纬度和经度(topojson 文件,用于将点添加到地图上的纬度和经度列)。您可以将数据集视为来自 vegasets 的数据集:data.airports() 以及另外两个数字列。而 topojson 为 data.us_10m.url

有没有办法在它们之间建立联系?

根据 US Airports 示例图并添加随附的散点图,您可以执行如下操作:

import altair as alt
from vega_datasets import data

airports = data.airports()
states = alt.topo_feature(data.us_10m.url, feature='states')
selection = alt.selection_interval()

# US states background
background = alt.Chart(states).mark_geoshape(
    fill='lightgray',
    stroke='white'
).properties(
    width=500,
    height=300
).project('albersUsa')

# airport positions on background
points = alt.Chart(airports).mark_circle(
    size=10,
).encode(
    longitude='longitude:Q',
    latitude='latitude:Q',
    tooltip=['name', 'city', 'state'],
    color=alt.condition(selection, alt.value('steelblue'), alt.value('lightgray'))
)

#lat/lon scatter
scatter = alt.Chart(airports).mark_point().encode(
    x='longitude:Q',
    y='latitude:Q',
    color=alt.condition(selection, alt.value('steelblue'), alt.value('lightgray'))   
).add_selection(
    selection
)

scatter | (background + points)

请注意,地理投影目前不支持间隔 select 离子,因此无法在地图本身上 select 点。