如何点击热图的正方形来过滤链接的条形图?(牛郎星)

2024-03-29 15:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到它,因此,如果我点击一个方块的热图,一个相邻的条形图会显示该方块中表示的数据的附加信息(而且热图方块在点击时会“亮起”)。下面的代码让热图按我想要的方式工作,但我不明白为什么柱状图不工作

(另外,如果我执行interval=alt.selection\u single(编码=['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


Tags: importdatachartbaraltcars方块encode
1条回答
网友
1楼 · 发布于 2024-03-29 15:28:36

当您想要跨不同的数据视图应用singlemulti选择时,您需要指定选择所应用的fieldsencodings,以告诉第二个图表要触发什么。例如:

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

相关问题 更多 >