Как нажать на квадрат тепловой карты, чтобы отфильтровать связанную гистограмму? (Альтаир) - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь получить его, поэтому, если я нажимаю на квадрат тепловой карты, соседняя гистограмма показывает дополнительную информацию о данных, представленных в этом квадрате (также квадрат тепловой карты должен «светиться» при нажатии). Приведенный ниже код заставляет тепловую карту работать так, как я хочу, но я не понимаю, почему диаграмма не работает.

(Кроме того, если я сделаю interval = alt.selection_single (encodings = [ 'x', 'y'] вместо этого, диаграмма начинает делать то, что я хочу, но затем тепловая карта перестает работать.)

import altair as alt
from vega_datasets import data
cars = data.cars()

interval = alt.selection_single()

chart = alt.Chart(cars).mark_bar().encode(
    x=alt.X('Miles_per_Gallon', bin=True), 
    y=alt.X('Horsepower', bin=True),
    color=alt.condition(interval, 'count()', alt.value('lightgray'))
).properties(
    selection=interval
)

hist = alt.Chart(cars).mark_bar().encode(
    y='count()',
    x='Origin'
).transform_filter(interval)

chart | hist

Screenshot

1 Ответ

1 голос
/ 02 апреля 2020

Если вы хотите, чтобы выборки single или multi применялись к разным представлениям данных, вам нужно указать fields или encodings, к которым применяется выбор, чтобы указать второй диаграмме, на что нужно запускать. Например:

alt.selection_single(encodings=['x', 'y'])

По какой-то причине, хотя это нарушает условие цвета - я думаю, что это, вероятно, какая-то ошибка в Vega-Lite, связанная с выделениями и биннингом. Вы можете обойти это, используя два выбора, один для выделения и один для фильтра:

import altair as alt
from vega_datasets import data
cars = data.cars()

highlight = alt.selection_single()
select = alt.selection_single(encodings=['x', 'y'])

chart = alt.Chart(cars).mark_rect().encode(
    x=alt.X('Miles_per_Gallon', bin=True), 
    y=alt.X('Horsepower', bin=True),
    color=alt.condition(highlight, 'count()', alt.value('lightgray'))
).add_selection(
    highlight, select
)

hist = alt.Chart(cars).mark_bar().encode(
    y='count()',
    x='Origin'
).transform_filter(select)

chart | hist

enter image description here

...