Я пытаюсь сгенерировать 2 участка в Альтаире с одинаковыми selection
.
Я хотел бы построить точечные и гистограммы населения (y) и возраста (x). Я использую встроенный набор данных Altair population
. Население представляет собой сумму столбца people
в этом наборе данных. В наборе данных есть столбцы для year
, people
, age
и sex
. Я могу получить общее заполнение, используя sum(people)
и построить это как y
против age
. Для гистограммы я могу нарисовать аналогично sum(people)
в зависимости от возраста и цвета, используя столбец sex
.
Я пытаюсь настроить кисть / выделение между этими 2 графиками, чтобы можно было подсветить график рассеяния, и одновременно график гистограммы обновляется в соответствии с этим выделением. Тем не менее, я застрял со следующей проблемой
Я использую многослойную диаграмму , пример из документации 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
. Затем я определяю гистограмму тех же двух столбцов и снова использую selection
, чтобы указать цвет. Вот вывод
![enter image description here](https://i.stack.imgur.com/hd1WM.png)
Теперь я хотел бы перетащить прямоугольник по верхнему (рассеянному) графику, чтобы выбрать несколько точек, и одновременно нижняя (столбчатая) диаграмма должна обновиться на основе selection
. Когда я перетаскиваю верхний график, чтобы сделать selection
, это происходит
![enter image description here](https://i.stack.imgur.com/hDshP.png)
Проблемы
- После перетаскивания для выделения на верхнем графике цвета (внутри и снаружи выделения) на обоих графиках изменяются на
lightgrey
. Я ожидал, что на обоих графиках внутри выделения / кисти будет подсвечено, но снаружи должно быть lightgrey
.
Как я могу получить выделение, подсвеченное одновременно на верхнем и нижнем графиках?
EDIT
Я хочу это поведение , когда кисть / выделение на одном графике одновременно подсвечивается на втором (связанном) графике.
Версии пакета:
Python = 3.6
Altair = 2.2
Jupyter = 5.6