Как придать сгруппированной гистограмме Bokeh цвет для каждой группы? - PullRequest
0 голосов
/ 19 февраля 2020

Концепция

Чтобы оценить мои модели прогнозирования, я хочу создать гистограмму, разделенную по используемому набору данных, модели и метрике оценки 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?

...