Странные ярлыки на боке пирог / пончик - PullRequest
0 голосов
/ 11 декабря 2019

Я следую за ответом в этом вопросе: Добавление меток в клин круговой диаграммы в боке

Я пытаюсь добавить метки в свою диаграмму Боке, чтобы пользователи могли видеть значения данных,По какой-то причине график выглядит так:

Pie Chart

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

Вот мой код:

import os
import pandas as pd
import pyodbc
from bokeh.plotting import figure, show
from bokeh.io import export_png
from bokeh.models import LabelSet, ColumnDataSource
from bokeh.palettes import Category20
import matplotlib as plt
from math import pi
from bokeh.transform import cumsum

lst = ['On_Time', 'All'] 

lst2 = [8, 85] 

df = pd.DataFrame(list(zip(lst, lst2)), 
               columns =['Column', 'Value']) 
df 

df['angle'] = df['value']/df['value'].sum() * 2*pi
df['angle']

df['color'] = ['#084594', '#2171b5']

#z=110*(df['value']/df['value'].sum())
#df['value']=z
#df

p = figure(plot_height=350, title="", toolbar_location=None,
           tools="", x_range=(-.5, .5))

p.annular_wedge(x=0, y=1,  inner_radius=0.15, outer_radius=0.25, direction="anticlock",
                start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
        line_color="white", fill_color='color', legend='column', source=df)

df["value"] = df['value'].astype(str)
df["value"] = df["value"].str.pad(35, side = "left")
source = ColumnDataSource(df)

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

p.add_layout(labels)

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

show(p)

1 Ответ

0 голосов
/ 12 декабря 2019

Метки «внизу», потому что вы установили

level='glyph'

в вызове LabelSet. Обычно причин для нарушения уровней рендеринга по умолчанию не очень много. Если вы удалите это, метка будет отображаться «сверху» так, как предназначены аннотации, такие как LabelSet.

Также обратите внимание на «str padding», который другой ответ использовал для позиционирования выравнивания метки. Это немного хакерский, но исправный. Различия в шрифтах между браузерами зрителей могут иметь небольшие различия. Альтернатива состоит в том, чтобы вычислить фактические, точные x, y позиции вокруг круга, куда вы хотите поместить метки.

...