Многострочный xs и ys должны быть списком списков, поэтому он не работает.Я заменил мультилинию на 3 нормальные строки, и теперь она должна работать нормально.Если вы действительно хотите использовать многострочное форматирование, вы должны отформатировать данные следующим образом:
index = ['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30', '2018-05-31',
'2018-06-30', '2018-07-31', '2018-08-31', '2018-09-30', '2018-10-31']
source = ColumnDataSource(dict(
"xs": [index, index, index],
"ys": np.random.rand(3, 10).tolist()
))
Рабочий код со строкой вместо многострочного:
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.io import output_notebook, show
import pandas as pd
import numpy as np
index = ['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30', '2018-05-31',
'2018-06-30', '2018-07-31', '2018-08-31', '2018-09-30', '2018-10-31']
columns = ['Argentina', 'Turkey', 'Mexico']
np.random.seed(123)
data = np.random.rand(10, 3)
df = pd.DataFrame(index=index, columns=columns, data=data)
df['Date'] = index
output_notebook()
source = ColumnDataSource(df)
p = figure(plot_height=400, x_range=index)
p.line(x='Date', y='Argentina', source=source, color='red', legend='Argentina ', name='Argentina')
p.line(x='Date', y='Turkey', source=source, color='blue', legend='Turkey ', name='Turkey')
p.line(x='Date', y='Mexico', source=source, color='green', legend='Mexico ', name='Mexico')
p.xaxis.major_label_orientation = 0.90
p.legend.click_policy="hide"
p.add_tools(HoverTool(tooltips=[('Country', '$name'),
('Date', '@Date'),
('Value', '$y')]))
show(p)
Версия с многострочным:
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.io import show, output_notebook
import pandas as pd
import numpy as np
index = ['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30', '2018-05-31',
'2018-06-30', '2018-07-31', '2018-08-31', '2018-09-30', '2018-10-31']
columns = ['Argentina', 'Turkey', 'Mexico']
np.random.seed(123)
data = np.random.rand(10, 3)
df = pd.DataFrame(index=index, columns=columns, data=data)
df_transposed = df.transpose()
source = ColumnDataSource({"xs": [df.index.values.tolist()]*len(list(df.columns.values)), "ys": df_transposed.values.tolist(), "colors": ["red", "green", "blue"], "names": list(df.columns.values)})
output_notebook()
p = figure(plot_height=400, x_range=index)
p.multi_line(xs='xs', ys='ys', color = "colors", name="names", legend="names", source=source)
p.xaxis.major_label_orientation = 0.90
p.legend.click_policy="hide"
p.add_tools(HoverTool(tooltips=[('Country', '@names'),
('Date', '$x'),
('Value', '$y')]))
show(p)
У меня была только одна проблема с инструментом наведения.Не отображается правильная дата.(Теперь он показывает позицию x, если я заменил это на «xs», то отобразился бы весь список дат)