Неверная легенда диаграммы стека Bokeh - PullRequest
0 голосов
/ 27 марта 2019

у меня есть фрейм данных

df = pd.DataFrame({'Category': ['<£5000', '£100K to £250K'],
               '01/01/2014': [8,1],
               '01/01/2015': [8,2],
               '01/01/2016': [7,1]})

Я создаю диаграмму с накоплением в Bokeh.Создание диаграммы - это хорошо, но легенда неверна.

grouped = df.groupby('Category')['01/01/2014', '01/01/2015', '01/01/2016'].mean().round(0)

source = ColumnDataSource(grouped)
countries = source.data['Category'].tolist()
p = figure(x_range=countries)

p.vbar_stack(stackers=['01/01/2014', '01/01/2015', '01/01/2016'],
         x='Category', source=source,
         legend = ['01/01/2014', '01/01/2015', '01/01/2016'],
         width=0.5, color=Spectral3)


p.title.text ='Average Number of Trades by Portfolio Size'
p.legend.location = 'top_right'

p.xaxis.axis_label = 'Portfolio Size'
p.xgrid.grid_line_color = None  #remove the x grid lines

p.yaxis.axis_label = 'Average Number of Trades'

show(p)

Я думаю выше в строке ниже, я установил легенду на годы.Однако, как на изображении, на графике установлено три точки.

legend = ['01/01/2014', '01/01/2015', '01/01/2016']

enter image description here

1 Ответ

1 голос
/ 27 марта 2019

Он отображает правильные имена легенд, если вы добавляете что-то еще в список легенд, если он не совпадает с датами в вашем ColumnDataSource.Поэтому простое решение вашей проблемы - добавить пробел после каждой даты в списке легенд.

import pandas as pd
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, show
from bokeh.palettes import Spectral3

df = pd.DataFrame({'Category': ['<£5000', '£100K to £250K'],
               '01/01/2014': [8,1],
               '01/01/2015': [8,2],
               '01/01/2016': [7,1]})


grouped = df.groupby('Category')['01/01/2014', '01/01/2015', '01/01/2016'].mean().round(0)

source = ColumnDataSource(grouped)
countries = source.data['Category'].tolist()
p = figure(x_range=countries)

p.vbar_stack(stackers=['01/01/2014', '01/01/2015', '01/01/2016'],
         x='Category', source=source,
         legend = ['01/01/2014 ', '01/01/2015 ', '01/01/2016 '],
         width=0.5, color=Spectral3)


p.title.text ='Average Number of Trades by Portfolio Size'
p.legend.location = 'top_right'

p.xaxis.axis_label = 'Portfolio Size'
p.xgrid.grid_line_color = None  #remove the x grid lines

p.yaxis.axis_label = 'Average Number of Trades'

show(p)

enter image description here

...