Добавление меток к боке круговой диаграммы - PullRequest
0 голосов
/ 30 июня 2019

Я новичок в боке и хочу сделать круговую диаграмму, используя фигуру боке.

Я использовал ссылку из https://bokeh.pydata.org/en/latest/docs/gallery/pie_chart.html для создания фигуры круговой диаграммы.

Теперь мне нужно добавить на каждую часть круговой диаграммы метку, которая представляет процент этой части, и положение метки должно быть выровнено по центру.

Я не смог найти простой способ сделать это с помощью документации, и попытался найти способы сделать это вручную, как в следующем примере: Добавление меток в клин круговой диаграммы в боке

Я пытался создать набор меток и добавить макет к графику, но не мог понять, есть ли способ контролировать положение, размер и шрифт метки. text_align (справа, слева, по центру) не выполняет эту работу за меня.

Вот мой код - эта функция создает и возвращает HTML круговой диаграммы Аргумент диаграммы содержит соответствующие данные для диаграммы. в этом случае это кортеж (размер 1), а серия [0] содержит имя серии (series.title), список значений x (series.x) и список значений y (series.y)

def render_piechart(self, chart):
    """
    Renders PieChart object using Bokeh
    :param chart: Pie chart
    :return:
    """
    series = chart.series[0]
    data_dict = dict(zip(series.x, series.y))
    data = pd.Series(data_dict).reset_index(name='value').rename(columns={'index': 'Category'})
    data['angle'] = data['value'] / data['value'].sum() * 2 * pi
    data['color'] = palette[:len(series.x)]
    data['percentage'] = data['value'] / data['value'].sum() * 100
    data['percentage'] = data['percentage'].apply(lambda x: str(round(x, 2)) + '%')

    TOOLTIPS = [('Category', '@Category'), ('Value', '@value'), ('Percentage', '@percentage')]

    fig = figure(title=series.title,
                 plot_width=400 if chart.sizehint == 'medium' else 600,
                 plot_height=350 if chart.sizehint == 'medium' else 450,
                 tools='hover', tooltips=TOOLTIPS, x_range=(-0.5, 1.0))

    fig.wedge(x=0, y=1, radius=0.45, start_angle=cumsum('angle', include_zero=True),
              end_angle=cumsum('angle'), line_color='white', fill_color='color',
              legend='Category', source=data)

    fig.title.text_font_size = '20pt'

    source = ColumnDataSource(data)

    labels = LabelSet(x=0, y=1, text='percentage', level='glyph', angle=cumsum('angle', include_zero=True),
                      source=source, render_mode='canvas')

    fig.add_layout(labels)

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

    return bokeh.embed.file_html(fig, bokeh.resources.CDN) 

И вот результаты: круговая диаграмма состоит из 3 частей

круговая диаграмма состоит из 10 частей

в 2 примерах - название серии 'kuku' значения x и y для первого примера: x = ["A", "B", "C"] у = [10, 20, 30]

и для второго примера: x = ["A", "B", "C", "D", "E", "F", "G", "H", "I"] у = [10, 20, 30, 100, 90, 80, 70, 60, 30, 40, 50]

Я знаю, что в прошлом я мог легко сделать это с Пончиком, но это устарело. Я хочу иметь возможность получить что-то вроде этого: example1 или это: пример2

...