我无法将州轮廓覆盖在 Altair 的县级分区统计图上。
我正在使用 Altair 的图层方法来实现这一点。
但是,它采用州轮廓图的笔画颜色并用该颜色绘制县轮廓。
这是我的代码:
import altair as alt
from vega_datasets import data
us_states = alt.topo_feature(data.us_10m.url, 'states')
us_counties = alt.topo_feature(data.us_10m.url, 'counties')
unemp_data = data.unemployment(sep='\t')
unemp_data.head()
plot = alt.Chart(us_counties).mark_geoshape(stroke='white').project(
type='albersUsa'
).transform_lookup(
lookup='id',
from_=alt.LookupData(unemp_data, 'id', ['rate'])
).encode(
color='rate:Q'
).properties(
width=700,
height=400
)
outline = alt.Chart(us_states).mark_geoshape( stroke='black').project(
type='albersUsa'
).properties(
width=700,
height=400
)
alt.layer(plot,outline)
我得到以下结果: Layered Plot
最佳答案
这看起来是 Vega 中的一个错误,其中如果两个数据源相同,则笔划属性会相互覆盖。我设法通过在其中一个 URL 的末尾添加 "#"
来欺骗 Vega 认为数据集不同来解决此问题:
import altair as alt
from vega_datasets import data
us_states = alt.topo_feature(data.us_10m.url, 'states')
us_counties = alt.topo_feature(data.us_10m.url+"#", 'counties')
unemp_data = data.unemployment.url
plot = alt.Chart(us_counties).mark_geoshape(stroke='white').project(
type='albersUsa'
).transform_lookup(
lookup='id',
from_=alt.LookupData(unemp_data, 'id', ['rate'])
).encode(
color='rate:Q'
).properties(
width=700,
height=400
)
outline = alt.Chart(us_states).mark_geoshape(stroke='black', fillOpacity=0).project(
type='albersUsa'
).properties(
width=700,
height=400
)
alt.layer(plot,outline)
(此外,我指定了 fillOpacity=0
因为此默认值将在 Vega-Lite 4 中更改)。
关于python-3.x - 在 Altair 的等值区域上叠加状态轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222697/