我一直在玩Altair的地图功能。我现在很容易建立州和县界的美国地图。我坚持的是将地图过滤到较低的水平。例如,如果我想建立一个只有乔治亚州与县界的地图,我该怎么做?
我有一个解决方案,但这是一个糟糕的解决方案。好奇,如果有更好的方法。这是我的代码:
states_data = alt.topo_feature(data.us_10m.url, "states")
counties = alt.topo_feature(data.us_10m.url, 'counties')
states = alt.Chart(states_data).mark_geoshape(
stroke='black',
strokeWidth=1
).transform_filter((alt.datum.id == 13))
cobb = alt.Chart(counties).mark_geoshape(
stroke='black',
strokeWidth=1
).transform_filter((alt.datum.id == 13067))
fulton = alt.Chart(counties).mark_geoshape(
stroke='black',
strokeWidth=1
).transform_filter((alt.datum.id == 13121))
dekalb = alt.Chart(counties).mark_geoshape(
stroke='black',
strokeWidth=1
).transform_filter((alt.datum.id == 13089))
states + cobb + fulton + dekalb
这段代码给了我这个结果:
我正在使用非常常见的Albers USA data来创建州界和县界。我用“州”来投影乔治亚州,然后我用“cobb”,“fulton”和“dekalb”来预测3个不同的亚特兰大都市县。
这是有效的,但效率非常低,而且对于该州所有159个县来说,这将是一个巨大的痛苦。有没有比我使用的更简单的过滤县的方法?或者在没有超过1000行代码的情况下,在所有159个县中阅读一些良好的自动化方式!?
编辑:同样为了记录,我尝试做县,然后按州过滤,但这不起作用。代码如下:
states = alt.Chart(states_data).mark_geoshape(
stroke='black',
strokeWidth=1
).transform_filter((alt.datum.id == 13))
counties = alt.Chart(counties).mark_geoshape(
stroke='black',
strokeWidth=1
).project('albersUsa')
states + counties
该代码似乎只是完整的美国县地图。
县id代码以state id开头。使用简单的js技巧,您可以提取它。
counties = alt.topo_feature(data.us_10m.url, 'counties')
map_georgia =(
alt.Chart(data = counties)
.mark_geoshape(
stroke='black',
strokeWidth=1
)
.transform_calculate(state_id = "(datum.id / 1000)|0")
.transform_filter((alt.datum.state_id)==13)
)
map_georgia