Как отобразить / сохранить многоуровневый график в altair, запустив код из консоли Python - PullRequest
1 голос
/ 21 апреля 2020

После создания трех различных диаграмм с API-интерфейсом altair graph и последующего их объединения в соответствии с документацией altair.

(подложка + основа + оверлей) .save ("layeredChart. html")

Файл html создается с именем layeredChart. html

При открытии файла html возникает ошибка:

JavaScript Ошибка: повторяющееся имя сигнала: " selector002_tuple "Обычно это означает, что в спецификации диаграммы есть опечатка. См. Консоль javascript для полной трассировки.

В чем может быть причина ошибки при генерации файла html с altair, хотя он отлично работает с ноутбуком jupyter ??

код :

import altair as alt

#altair plot
alt.data_transformers.disable_max_rows()

#Selection tool
selection = alt.selection_single(fields = ['Country/Region'])

#Underlay
base = alt.Chart(de_long).mark_line(strokeWidth=4,opacity=0.7).encode(
    x = alt.X('Day'),
    y = alt.Y('De',scale=alt.Scale(type='log')),
    color = alt.Color('Country/Region',legend=None)
    ).properties(
    width=800,
    height=650
    ).interactive()
print(alt.renderers.names())

#Chart
chart1 = base.encode(
    color=alt.condition(selection,'Country/Region:N',alt.value('lightgray'))).add_selection(selection)


#Overlay
overlay = base.encode(
    color = 'Country/Region',
    opacity = alt.value(0.5),
    tooltip = ['Country/Region:N','Name:N']
).transform_filter(selection)

finalChart = (base+chart1+overlay)
finalChart.save("final.html")

1 Ответ

0 голосов
/ 21 апреля 2020

Эта ошибка обычно означает, что вы вызвали add_selection() с одинаковым выбором на нескольких слоях, что не поддерживается средством визуализации Vega-Lite.

Вот Пример минимальной воспроизводимости этой ошибки:

import altair as alt
import pandas as pd

df = pd.DataFrame({'x': range(10)})
selection = alt.selection_single()
base = alt.Chart(df).encode(x='x').add_selection(selection)
base.mark_line() + base.mark_point()
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.

Способ исправить это - добавить выделение только к одному из слоев; например:

base = alt.Chart(df).encode(x='x')
base.mark_line() + base.mark_point().add_selection(selection)

enter image description here

...