боке выбор виджета не обновляет сюжет - PullRequest
0 голосов
/ 30 мая 2018

Я следил за некоторыми примерами здесь в stackoverflow для обновления моего графика с помощью виджета 'select'.Когда я запускаю файл .py через оболочку anaconda, я вижу график и виджет «Выбрать».Так или иначе мой заговор не обновляет заговор все же.Я должен сказать, что набор данных имеет счет около 11000 строк (я не знаю, насколько это актуально).Я видел тему, где преобразование фрейма данных в словари помогло кому-то наладить взаимодействие.Итак, я сделал это со следующим кодом:

from bokeh.layouts import row, column, widgetbox
from bokeh.plotting import figure, show, output_file, ColumnDataSource
from bokeh.models.widgets import Select
from bokeh.io import curdoc, show

df = pd.read_excel('data.xlsx')

d1 = df.to_dict()
d2 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'compliment'].to_dict()
d3 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'complaint'].to_dict()
d4 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'infrastructure'].to_dict()
d5 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'autority'].to_dict()
d6 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'finance'].to_dict()
d7 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'english'].to_dict()
d8 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'danger'].to_dict()
d9 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'health'].to_dict()
d10 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'sport'].to_dict()
d11 = df[['Polarity', 'Subjectivity']].loc[df['Subject'] == 'remaining'].to_dict()

Теперь, когда я создал словари, я создал сюжет со следующим кодом:

source = ColumnDataSource(df)

p = figure()
r = p.circle(x='Polarity', y='Subjectivity', 
         source = source)

select = Select(title="Subject",  options=['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'd10', 'd11'])

def update_plot(attr, old, new):

    if select.value == 'd1': 
        newSource = d1

    if select.value == 'd2':
        newSource = d2
    if select.value == 'd3':
        newSource = d3
    if select.value == 'd4':
        newSource = d4
    if select.value == 'd5':
        newSource = d5
    if select.value == 'd6':
        newSource = d6
    if select.value == 'd7':
        newSource = d7
    if select.value == 'd8':
        newSource = d8
    if select.value == 'd9':
        newSource = d9
    if select.value == 'd10':
        newSource = d10
    if select.value == 'd11':
        newSource = d11
    source.data =  newSource 

select.on_change('value', update_plot)
layout = column(row(select, width=400), p)
curdoc().add_root(layout)

После многих попыток я все еще продолжаюне удалось заставить работать взаимодействие.Что я делаю не так?

1 Ответ

0 голосов
/ 31 мая 2018

Поскольку вы не предоставили данные, я создал фиктивные данные, используя этот код -

import pandas as pd
import random

list_type = ['All', 'Compliment', 'Sport', 'Remaining', 'Finance', 'Infrastructure', 'Complaint', 'Authority',
 'Danger', 'Health', 'English']



df = pd.concat([pd.DataFrame({'Subject' : [list_type[i] for t in range(110)], 
                   'Polarity' : [random.random() for t in range(110)],
                   'Subjectivity' : [random.random() for t in range(110)]}) for i in range(len(list_type))], axis=0)

Вам необходимо использовать источник данных, связанный с вашей диаграммой.Вы можете использовать простые функции для управления фреймом данных, создания источника данных columndat и изменения данных за диаграммой -

options = []
options.append('All')

options.extend(df['Subject'].unique().tolist())
source = ColumnDataSource(df)

p = figure()
r = p.circle(x='Polarity', y='Subjectivity', source = source)

select = Select(title="Subject",  options=options, value="All")
output_notebook()

def update_plot(attr, old, new):
    if select.value=="All":
        df_filter = df.copy()
    else:
        df_filter = df[df['Subject']==select.value]
    source1 = ColumnDataSource(df_filter)
    r.data_source.data = source1.data
select.on_change('value', update_plot)
layout = column(row(select, width=400), p)
#show(layout)
curdoc().add_root(layout)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...