如何在 Altair 上的交互式 Scatter 上添加文本?

How to add text on interactive Scatter on Altair?

我尝试改编来自 altair 文档 (https://altair-viz.github.io/gallery/select_detail.html#selection-detail-example) 的选择详细信息示例

我不会详细说明我的 Dataframe 结构,它与示例中的相同(包括变量名)。

本机代码运行良好:

# Data is prepared, now make a chart

selector = alt.selection_single(empty='all', fields=['id'])

base = alt.Chart(data).properties(
    width=250,
    height=250
).add_selection(selector)


points = base.mark_point(filled=True, size=200,opacity=0.9).encode(
    x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
    y=alt.Y('mean(x)',title='Taux de marge (%PM)'),
    color=alt.condition(selector, 'id:O', alt.value('lightgray')),
    tooltip = ['mean(y)','mean(x)']
)

timeseries = base.mark_bar(opacity=1).encode(
    x=alt.X('time', title='Items'),
    y=alt.Y('value', scale=alt.Scale(domain=(-1, 1)),stack=None),
    color=alt.Color('id:O',scale=alt.Scale(domain=domain, range=range_))
                    #, legend=None)
).transform_filter(
    selector
)

points | timeseries

在这个阶段没问题,即使当没有选择时隐藏右图上的所有条形图可能很有用在右图上(不知道它是否可能吗?)

之后,我尝试将文本添加到散点图中,在代码末尾添加:

text = points.mark_text(dy=-5).encode(
    x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
    y=alt.Y('mean(x)',title='NBV (%CA)'),
    text='id:O'
)


(points + text) | timeseries

这会导致以下错误消息:

Javascript 错误:信号名称重复:“selector094_tuple” 这通常意味着您的图表规范中存在拼写错误。请参阅 javascript 控制台以获取完整的回溯。

如果您有任何关于如何做的想法,我将不胜感激

谢谢

问题是您不能将相同的选区添加到两个不同的图层,您可以通过从 points 派生 text 来隐式地执行此操作。试试这个:

text = alt.Chart(data).mark_text(dy=-5).encode(
    x=alt.X('mean(y)',title='Durée de perception',scale=alt.Scale(domain=(11, 23))),
    y=alt.Y('mean(x)',title='NBV (%CA)'),
    text='id:O'
)


(points + text) | timeseries