我正在尝试在 Altair 中生成 2 个共享相同的地块selection
。
我想绘制人口(y)与年龄(x)的散点图和条形图。我正在使用 Altair 内置数据集population
。人口是people
此数据集中列的总和。数据集包含year
、people
和age
的列sex
。sum(people)
我可以使用和绘制它来获得总人口y
。age
对于条形图,我可以使用柱类似地绘制sum(people)
年龄和颜色。sex
我正在尝试在这两个图之间设置画笔/选择,以便我可以在散点图中突出显示,同时更新条形图以反映该选择。但是,我遇到了以下问题
我正在使用 Altair 文档中的分层条形图示例作为示例。
这是代码
import altair as alt
from altair.expr import datum, if_
from vega_datasets import data
interval = alt.selection_interval(encodings=['x', 'y'])
df = data.population.url
scatter = alt.Chart(df).mark_point().encode(
alt.X('age:O', axis=alt.Axis(title='')),
y='sum(people)',
color=alt.condition(interval, 'sex:N', alt.value('lightgrey'))
).transform_filter(
filter = datum.year == 2000
).transform_calculate(
"sex", if_(datum.sex == 2, 'Female', 'Male')
).properties(
selection=interval
)
bar = alt.Chart(df).mark_bar(opacity=0.7).encode(
alt.X('age:O', scale=alt.Scale(rangeStep=17)),
alt.Y('sum(people)', stack=None),
color=alt.condition(interval, 'sex:N', alt.value('lightgrey')),
).transform_filter(
filter = datum.year == 2000
).transform_calculate(
"sex", if_(datum.sex == 2, 'Female', 'Male')
).properties(height=100, width=400)
scatter & bar
我已经修改了文档示例中的代码。我首先创建一个散点图,然后使用基于selection
. 然后我定义了相同 2 列的条形图,并再次使用selection
来指定颜色。这是输出
现在,我想在顶部(散点)图上拖动一个框以选择一些点,同时底部(条形)图表应根据selection
. 当我拖入顶部情节以制作我的selection
时,会发生这种情况
问题
- 在顶部绘图中拖动以进行选择后,两个绘图中的颜色(选择内部和外部)都更改为
lightgrey
。我预计,在这两个图中,选择/画笔内部会被突出显示,但外部应该是lightgrey
.
如何获得同时在顶部和底部图中突出显示的选择?
编辑
我想要这种行为,其中一个图中的画笔/选择同时在第二个(链接)图中突出显示。
软件包版本:
Python = 3.6
Altair = 2.2
Jupyter = 5.6