Концепция
Чтобы оценить мои модели прогнозирования, я хочу создать гистограмму, разделенную по используемому набору данных, модели и метрике оценки c.
Данные для воспроизведения
Вот как выглядят результаты:
from bokeh.io import show, output_file
from bokeh.plotting import figure
from bokeh.palettes import Spectral5
from bokeh.transform import factor_cmap
from itertools import product
import numpy as np
import pandas as pd
# Creating some data to reproduce my issue:
metrics = ['MA', 'R2', 'MSLE', 'RMSRE', 'cost-based']
models = ['baseline', 'LSTM', 'XGB']
dataset = ['train', 'test']
rows = []
for element in product(metrics, models, dataset):
rows.append(element)
results = pd.DataFrame(data = rows, columns=['Metric', 'Model', 'Dataset'])
results['Value'] = np.random.rand(len(results))
results.loc[results.Metric.isin(['MA', 'MSLE', 'RMSRE', 'cost-based']), 'Value'] = 1/results['Value']
Группировка
Теперь я группирую данные по набору данных, метри c и модели.
# I normalize the metrics to make them visible in the plot (because the absolute error is high compared to the other metrics)
transformed = (results.groupby(by=['Dataset', 'Metric']).transform(lambda x: (x/(max(x)))))
results['Value'] = transformed['Value']
mygroup = results.groupby(by=['Dataset', 'Metric', 'Model'])
Plotting
Здесь я не знаю, как поступить, потому что Bokeh возвращает только серые полосы.
my_index_cmap = factor_cmap('Dataset_Metric_Model', palette=Spectral5,
factors=results.Model.unique())
my_p = figure(plot_width=800, plot_height=300, title="Metric visualisation",
x_range=mygroup, toolbar_location=None, tooltips=[("Metric", "@Value_max")])
my_p.vbar(x='Dataset_Metric_Model', top='Value_max', width=1, source=mygroup,
line_color="white", fill_color=my_index_cmap, )
my_p.y_range.start = 0
my_p.x_range.range_padding = 0.05
my_p.xgrid.grid_line_color = None
my_p.xaxis.major_label_orientation = 1.2
my_p.outline_line_color = None
show(my_p)
Вопрос
Результат, как и ожидалось , за исключением цветов.
Как я могу указать цвет для каждого типа модели после такой группировки в Bokeh factor_cmap?