Создать гистограмму с накоплением, используя Bokeh в Python

У меня есть данные ниже, которые фиксируют текущий класс устройства и было ли изменение класса затронуто или нет.

Class   Class_Change
S        yes
S        yes
G        yes
P        yes
P        yes
V        no
G        yes
V        no
V        no
V        yes
P        no

Теперь я хочу отобразить Да / Нет для каждого класса в виде гистограммы. Нечто подобное ниже, которое я создал в Excel. Таблица - это число да / нет по каждому классу, а диаграмма - это столбчатая диаграмма с накоплением.

введите описание изображения здесь

Я попробовал следующий код:

df2 = pd.DataFrame({'count': df_class.groupby(["Class","Class_Change"]).size()}).reset_index()

class = df2['Class'].tolist()
class_change = df2['Class_Change'].tolist()
count = df2['count'].tolist()

source = ColumnDataSource(data=dict(Classes = class, count=count, ClassChange = class_change,color = Viridis5))

plot = figure(x_range=tiers ,y_range=(0,max(count)), plot_height=350, plot_width = 800,title="Counts",
           toolbar_location=None, tools="")

labels = LabelSet(x = 'Class', y= 'count' , text='count', level='glyph',
                       y_offset=0 , source=source, render_mode='canvas')

plot.vbar_stack(class_change, x='class', width=0.9, color='color', source=source, legend=[value(x) for x in class_change]) 

но это дает ошибку:

AttributeError: 'Figure' object has no attribute 'vbar_stack'

Может кто-нибудь, пожалуйста, помогите мне с этим??

1 ответ

Справочные документы bokeh дают пример, который может быть переработан для вашего случая, здесь:

Предполагая ColumnDataSource с именем source со столбцами 2106 и 2017, затем> следующий вызов vbar_stack создаст два средства визуализации VBar, которые складываются:

p.vbar_stack(['2016', '2017'], x=10, width=0.9, color=['blue', 'red'], source=source)

vbar_stack требует, чтобы данные, которые он предоставляет, были структурированы особым образом. Значения, которые мы хотим собрать, должны быть представлены в виде столбцов в нашем источнике данных столбцов. Что-то вроде этого:

таблица со столбцами класса, нет и да. Столбцы

Тогда мы могли бы написать что-то вроде этого:

plot.vbar_stack(['no', 'yes'], 
                x='Class', 
                width=0.9, 
                color=['blue', 'orange'],
                line_color='white',
                legend=['No', 'Yes'],  # caps prevents calling columns
                source=source)

Однако вы столкнулись с другой проблемой. "Объект" Figure "не имеет атрибута" vbar_stack "" говорит нам, что vbar_stack Метод не определен для объекта рисунка, для которого вы пытаетесь вызвать этот метод. Наиболее вероятной причиной является то, что вы используете версию Bokeh от vbar_stack был добавлен. В этом случае решение состоит в том, чтобы обновить bokeh до последней версии с помощью pip или conda.

Другие вопросы по тегам