Altair selection error: "Javascript Error: Duplicate signal name: "selector074_index""

Altair selection error: "Javascript Error: Duplicate signal name: "selector074_index""

我一直在尝试使用 this code:

选择以下图表来复制显示的文本

但是我收到以下错误: Javascript Error: Duplicate signal name: "selector074_index" This usually means there's a typo in your chart specification. See the javascript console for the full traceback.

我一整天都在努力找出我做错了什么,但没有任何运气。这是我的示例代码:


confirmed_area = alt.Chart(df.reset_index()).mark_area(fillOpacity=0).encode(
    alt.X('index:T', title=" "),
    alt.Y('confirmed:Q', title=" "),
    tooltip=[alt.Tooltip('index:T', title="Fecha"), alt.Tooltip('confirmed:Q', title="Casos acumulados"), alt.Tooltip('confirmed_daily:Q', title="Nuevos Casos")]
).properties(
    height = 200,
    width = 800
).interactive(

)


confirmed_line = alt.Chart(df.reset_index()).mark_line(size=3).encode(
    alt.X('index:T', title=" "),
    alt.Y('confirmed:Q', title=" ")
).properties(
    height = 200,
    width = 800,
).interactive(

)

nearest = alt.selection_single(
    nearest=True, on="mouseover", fields=["index:T"], empty="none"
)


point = (
    alt.Chart(df.reset_index())
    .mark_point(color="black")
    .encode(x="index:T", y="confirmed:Q", opacity=alt.condition(nearest, alt.value(1), alt.value(0)))
    .add_selection(nearest)
)

text =confirmed_line.mark_text(align="left", dx=5, dy=-5).encode(
    text=alt.condition(nearest, "confirmed:Q", alt.value(" "))
)

confirmed_line + confirmed_area + point + text

TL;DR – 从 confirmed_line.

的定义中删除 .interactive()

问题是您在图表上调用 .interactive(),然后将其与自身分层。此错误的最小重现如下所示:

import altair as alt
chart = alt.Chart('data.txt').mark_point().interactive()
chart + chart
# Javascript Error: Duplicate signal name: "selector001_tuple"
# This usually means there's a typo in your chart specification. See the javascript console for the full traceback.

要解决此问题,您应该只在其中一层上调用 .interactive()

import altair as alt
chart = alt.Chart('data.txt').mark_point()
chart + chart.interactive()

在你的代码中,你在定义confirmed_line时调用.interactive(),然后从中派生confirmed_text,这样当它分层时,在一层上有两个相同的交互, 这是不允许的。如果您从 confirmed_line 中删除此调用,您的图表应该可以工作:confirmed_area 层上的 .interactive() 调用已经指定轴应该是交互的。