我正在尝试绘制两个单独的地理形状图表并将它们连接在一起。以下是我正在尝试做的 MWE:
import altair as alt
from vega_datasets import data
import geopandas as gpd
source = data.us_10m
source = gpd.read_file(source.url).set_crs(epsg=4326)
r1 = alt.Chart(source).mark_geoshape().transform_filter(alt.datum.id == '49047')
r2 = alt.Chart(source).mark_geoshape().transform_filter(alt.datum.id == '20123')
r1 | r2
单独绘制它们效果很好; Altair 会自动绘制形状并缩放至其范围。
R1:
R2:
但是,当我尝试连接它们时,它们共享轴限制,并且每个图表的视图都会扩展得足够大,即使只显示一个,也可以显示两者。
串联情节:
我的期望是我可以在没有额外缩放的情况下获得上面的 R1 和 R2 图像。我尝试将轴设置为独立解析,但它没有改变输出。
(r1 | r2).resolve_axis(x='independent', y='independent')
有关如何在 Vega-Lite 中执行此操作(无需 Altair 抽象)的答案也很有用。
看来这是 Vega-Lite 中的一个错误,我已经在存储库中提交了一个问题。
与此同时,我已经找到了一种副作用最小/无副作用的解决方法。如果图表使用不同的投影,Vega-Lite 不会缩放图表以覆盖彼此的范围。因此,我们可以稍微改变每个图表的投影,它就会按预期运行。
import altair as alt
from vega_datasets import data
import geopandas as gpd
source = data.us_10m
source = gpd.read_file(source.url).set_crs(epsg=4326)
r1 = alt.Chart(source).mark_geoshape(
).transform_filter(alt.datum.id == '49047'
).project('equalEarth')
r2 = alt.Chart(source).mark_geoshape(
).transform_filter(alt.datum.id == '20123'
).project('equalEarth', precision=.707)
r1 | r2