Цвета круговой диаграммы Python Bokeh, как изменить - PullRequest
0 голосов
/ 04 октября 2018

У меня есть палитра:

chart_colors = ['#44e5e2', '#e29e44', '#e244db',
                '#d8e244', '#eeeeee', '#56e244', '#007bff', 'black']

И круговая диаграмма, сгенерированная Bokeh.

x = Counter({
    'Submitted': 179,
    'Approved': 90,
    'Denied': 80
})

data = pd.DataFrame.from_dict(dict(x), orient='index').reset_index().rename(
    index=str, columns={0: 'value', 'index': 'claimNumber'})
data['angle'] = data['value']/sum(x.values()) * 2*pi
data['color'] = Category20c[len(x)]

p = figure(plot_height=200,
           tooltips="@claimNumber: @value",
           name='claimChart')

p.wedge(x=0, y=1, radius=0.28,
        start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
        line_color="white", fill_color='color', legend='claimNumber', source=data)

curdoc().add_root(p)

Теперь fill_color = 'color' и цвет определяется как 'data ['color'] = Category20c [len (x)] '.

В более старых версиях возможно предоставить' color '(p.wedge (..., color = ...), но я использую Bokeh0.13.0, поэтому у меня есть только fill_color = 'color' для каждого цвета.

Как я могу изменить data ['color'] на цвет из моего массива 'chart_colors'?

1 Ответ

0 голосов
/ 04 октября 2018

, но я использую Bokeh 0.13.0, поэтому у меня есть только fill_color = 'color' для каждого цвета.

Это не так.Аргумент color доступен для любого метода глифа (включая wedge) - это просто удобство для одновременной установки fill_color и line_color.Ваш вопрос несколько сбивает с толку, поскольку размер вашей палитры не соответствует размеру ваших данных, но вот полный пример, который просто использует усеченную палитру:

from collections import Counter
from math import pi

import pandas as pd

from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.transform import cumsum

chart_colors = ['#44e5e2', '#e29e44', '#e244db',
                '#d8e244', '#eeeeee', '#56e244', '#007bff', 'black']

x = Counter({
    'Submitted': 179,
    'Approved': 90,
    'Denied': 80
})

data = pd.DataFrame.from_dict(dict(x), orient='index').reset_index().rename(
    index=str, columns={0: 'value', 'index': 'claimNumber'})
data['angle'] = data['value']/sum(x.values()) * 2*pi
data['color'] = chart_colors[:len(x)]

p = figure(plot_height=350, title="Pie Chart", toolbar_location=None)

p.wedge(x=0, y=1, radius=0.28,
        start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
        color='color', legend='claimNumber', source=data)

p.axis.axis_label=None
p.axis.visible=False
p.grid.grid_line_color = None

show(p)

enter image description here

...