Я пытаюсь создать интерактивную диаграмму временных рядов с более чем 20 строками данных, используя модуль Altair в Python.
Код для создания кадра данных формы, которую я просматриваю, находится здесь:
import numpy as np
import altair as alt
year = np.arange(1995, 2020)
day = np.arange(1, 91)
def gen_next_number(previous, limit, max_reached):
if max_reached:
return np.NAN, True
increment = np.random.randint(0, 10)
output = previous + increment
if output >= 100:
output = 100
max_reached = True
return output, max_reached
def gen_list():
output_list = []
initial = 0
limit = 100
max_reached = False
value = 0
for i in range(1, 91):
value, max_reached = gen_next_number(value, limit, max_reached)
if max_reached:
value = np.NAN
output_list.append(value)
return output_list
df = pd.DataFrame(index = day, columns=year )
for y in year:
data = gen_list()
df[y] = data
df['day'] = df.index
df = df.melt("day")
df = df.dropna(subset=["value"])
Я могу использовать следующий код Альтаира для создания начального графика, но это не очень красиво:
alt.Chart(df).mark_line().encode(
x='day:N',
color="variable:N",
y='value:Q',
tooltip=["variable:N", "value"]
)
![enter image description here](https://i.stack.imgur.com/8RWkT.png)
Но когда я попробовал этот код для создания чего-то интерактивного, он не работает:
highlight = alt.selection(type='single', on='mouseover',
fields='variable', nearest=True, empty="none")
alt.Chart(plottable).mark_line().encode(
x='day:N',
color="variable:N",
y=alt.condition(highlight, 'value:Q', alt.value("lightgray")),
tooltip=["variable:N", "value"]
).add_selection(
highlight
)
Он не работает с ошибкой:
TypeError: sequence item 1: expected str instance, int found
Может кто-нибудь мне помочь?
Кроме того, возможно ли сделать легенду интерактивной?Таким образом, при наведении курсора на год выделяется линия?