通过与 VegaLite/Altair 图的交互从外部发出 signals/events 的解决方法?

Workaround for externally emitting signals/events from interactions with VegaLite/Altair plots?

据我了解,官方不支持从 VegaLite/Altair 中的交互发出 signals/events,例如在散点图中选择点,而不是在 view/composition 中的图表].

目前是否有任何解决方法可以捕获在散点图中选择的点并在 VegaLite 外部处理它们(“外部”= Python 对我来说,因为我正在使用 Altair)?

例如,我可以使选择持久化并保存到 json 规范中,以便我可以在 Python 中解析吗?或者我可以编写一个自定义 javascript 函数,该函数由图表选择触发并保存为 Python 变量或打印到我可以从 Python 读取的某些流中吗?

带有交互式选择的图表文档中的示例代码:

import altair as alt
from vega_datasets import data

brush = alt.selection_interval() 
chart = alt.Chart(data.cars.url).mark_point().encode(
    x='Horsepower:Q',
    y='Displacement:Q',
    color=alt.condition(brush, 'Origin:N', alt.value('lightgray')),
    tooltip='Horsepower:Q').add_selection(brush)
chart

嗯,我也对此很感兴趣,所以我去 Altair 文档中搜索了。

如果你 did:

from pprint import pprint
pprint(chart.to_dict())

这是我得到的:

{'$schema': 'https://vega.github.io/schema/vega-lite/v4.8.1.json',
 'config': {'view': {'continuousHeight': 300, 'continuousWidth': 400}},
 'data': {'url': 'https://vega.github.io/vega-datasets/data/cars.json'},
 'encoding': {'color': {'condition': {'field': 'Origin',
                                      'selection': 'selector001',
                                      'type': 'nominal'},
                        'value': 'lightgray'},
              'tooltip': {'field': 'Horsepower', 'type': 'quantitative'},
              'x': {'field': 'Horsepower', 'type': 'quantitative'},
              'y': {'field': 'Displacement', 'type': 'quantitative'}},
 'mark': 'point',
 'selection': {'selector001': {'type': 'interval'}}}

那一定是其中的一部分?也许?

没有从 Python 访问 Altair 选择的通用方法,但如果您在 Streamlit 中工作,他们已经在该平台上实现了执行此操作的方法。参见