点击一个州,就可以在牛郎星图中看到该州的郡县。

我希望能够点击一个州(单选或多选)并显示所选州的县,同时继续显示未选州。我可以通过构建一个数据框架来实现这个目标,在这个数据框架中,我将州的形状的geojson文件附加到县的形状的geojson中。

census_area centroid_lat    centroid_lon    county_fips fips    geometry    geomlist    id  iso_3166_2  lsad    name    state   state_fips  state_only_fips

state_fips存在于每个元组中,其中state_only_fips只存在于州的形状中。然后,我用下面的代码来构建我的地图。

state_selection = alt.selection_single(empty='none', fields=['properties.state_only_fips'])

alt.Chart(combined_geo).mark_geoshape(stroke='black').encode(
).add_selection(
    state_selection
).transform_filter(
    {'not': state_selection}
).properties(
    width=900,
    height=700
).project("albersUsa")

这正确地隐藏了州的形状,并显示了底层的县,但它的表现很差。而不是渲染所有的县 状态形状,并只隐藏我选择的状态形状,我希望这个过程看起来像这样。

  1. 初始化图表,只显示状态形状(用state_only_fips值表示,或用lsad==state值表示)。

  2. 如果点击一个状态,隐藏所选状态,同时继续显示所有其他状态。

  3. 显示所选州的县的形状。显示所选州的县

我觉得这是有可能的,而且会让图表表现得更好,但我不知道如何构造geojson文件和我的transform_filter。

解决方案:

我终于能够通过有2个选择来实现这一点。一个是选中的州,一个是选中的州的县。为了显示各州,我显示 只是 被归类为 “状态 “且尚未被点击的形状。选择是在 仅仅是fips的状态 它只存在于状态形状中。

state_selection = alt.selection_multi(empty='none', fields=['properties.state_only_fips'], clear='dblclick')

{'and' : [('datum[\'properties.lsad\'] == \'State\''), {'not': state_selection}]}

我在 状态_fips每个形状都包含这个值。在状态形状中,这个值与下列数值相同 仅仅是fips的状态. 这第二个过滤器也过滤掉了所有未被归类为 “状态 “的形状。

county_selection = alt.selection_multi(empty='none', fields=['properties.state_fips'], clear='dblclick')

{'and' : [('datum[\'properties.lsad\'] !== \'State\''), county_selection]}

最后,我们将这两条语句与 谓词。最终的产品是这样的。

county_selection = alt.selection_multi(empty='none', fields=['properties.state_fips'], clear='dblclick')
state_selection = alt.selection_multi(empty='none', fields=['properties.state_only_fips'], clear='dblclick')

base_chart = alt.Chart().mark_geoshape(stroke='black').encode(
).add_selection(
    state_selection,
    county_selection
).transform_filter(
    {'or': [{'and' : [('datum[\'properties.lsad\'] == \'State\''), {'not': state_selection}]}
        ,{'and' : [('datum[\'properties.lsad\'] !== \'State\''), county_selection]}]}
).properties(
    width=900,
    height=700
).project("albersUsa")

这也许可以用更有效的方式来完成 但它比之前的效果要好得多。

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在现有的ionic应用中整合SSO?

2022-9-9 4:02:20

未分类

HIVE SubQuery表达式指的是Parent和SubQuery表达式。

2022-9-9 4:13:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索