Причина вашей ошибки:
vdim должно быть именем столбца, который вы хотите иметь на оси Y, но имя столбца 'Fraction' не существует, поэтому вы получите ошибку.
Вот возможное решение:
Когда вы устанавливаете час в качестве индекса, вы можете указать: kdim='hour'
и vdim='blocked_driveway'
, но в этом случае они вам на самом деле не нужны и вы можете их пропустить:
# import libraries
import numpy as np
import pandas as pd
import holoviews as hv
hv.extension('bokeh')
# create sample data
data = {'hour': ['00', '01', '02'],
'blocked_driveway': np.random.uniform(size=3),
'illegal_parking': np.random.uniform(size=3),
'street_condition': np.random.uniform(size=3),}
# create dataframe and set hour as index
df = pd.DataFrame(data).set_index('hour')
# create curves:
# in this case the index is automatically taken as kdim
# and the series variable, e.g. blocked_driveway is taken as vdim
plot1 = hv.Curve(df['blocked_driveway'], label='blocked_driveway')
plot2 = hv.Curve(df['illegal_parking'], label='illegal_parking')
plot3 = hv.Curve(df['street_condition'], label='street_condition')
# put plots together
(plot1 * plot2 * plot3).opts(legend_position='top', width=600, height=400)
Альтернативное и более короткое решение:
В этом случае, однако, Я бы использовал библиотеку hvplot , которая построена на основе holoviews.
У нее еще более простой синтаксис, и вам нужно намного меньше кода, чтобы получить нужный сюжет:
import hvplot.pandas
# you don't have to set hour as index this time, but you could if you'd want to.
df.hvplot.line(
x='hour',
y=['blocked_driveway',
'illegal_parking',
'street_condition'],
)
Итоговый участок: