Визуализация Bokeh не отображается в html выходном файле - PullRequest
0 голосов
/ 09 января 2020

Я работаю в интерактивной визуализации табличных данных. Я использую Bokeh (версия 1.4.0). Проблема в том, что в выходном файле html ничего не появляется. Я следую этому примеру ( окончательный результат ).

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

Код:

from os.path import join, dirname

import pandas as pd
import numpy as np 

from bokeh.io import curdoc
from bokeh.plotting import figure, output_file, show 
from bokeh.embed import components
from bokeh.models import ColumnDataSource, CustomJS, Slider, Div, Select, TextInput
from bokeh.models.tools import HoverTool
from bokeh.layouts import grid, column, layout


#data_path = 'DB1.csv'
#data_loaded = pd.read_csv(data_path)
#data_loaded = data_loaded.drop(columns=data_loaded.columns[0], axis=1)

syntetic_columns = ['id_pieza', 'xVar', 'yVar', 'zVar', 'N', 'P', 'vv', 'v']
syntetic_data = [['001', 1, 1, 1, 1, 10, 12, 15],
                 ['004', 7.5, 7.1, 5.1, 1, 12, 12, 1.5],
                 ['005', .1, 1, 1.54, 2, 9, 1.2, 1.5],
                 ['006', .51, 1, 1.45, 1, 8.5, 12, 15],]
data_loaded = pd.DataFrame(data=syntetic_data, columns=syntetic_columns)

data_loaded['color'] = np.where(data_loaded['N'] == 1, 'orange', 'grey')
data_loaded['alpha'] = np.where(data_loaded['N'] == 1, '0.9', '0.25')

source = ColumnDataSource(data_loaded)

desc = Div(text=open(join(dirname(__file__), "description.html")).read(), sizing_mode="stretch_width")

axis_map = {
    'Number of pieces': 'N',
    'Cost of one unit': 'P',
    'X maximum value': 'xVar',
    'Y maximum value': 'yVar',
    'Z maximum value': 'zVar',
}

x_axis = Select(title="X Axis", options=sorted(axis_map.keys()), value="Number of pieces")
y_axis = Select(title="Y Axis", options=sorted(axis_map.keys()), value="Cost of one unit")

xVal_maximun_slider = Slider(start=0,           
                             end=max(data_loaded['xVar'].values),
                             value=max(data_loaded['xVar'].values),
                             step=0.1,
                             title='X maximum value')

TOOLTIPS = [
    ('Cost per unit', '@P'),
    ('Number of pieces', '@N'),
    ('id', '@id_pieza'),
    ('x value', '@xVar'),
    ('y value', '@yVar'),
    ('z value', '@zVar'),
    ('Volumen de viruta', '@vv')
]

p = figure(plot_height=600, 
           plot_width=700, 
           title="", 
           toolbar_location=None, 
           tooltips=TOOLTIPS, 
           sizing_mode="scale_both")

p.circle(x="x", 
         y="y", 
         source=source, 
         size=7, 
         color="color", 
         line_color=None, 
         fill_alpha="alpha")

def select_movies():

    selected = data_loaded
    return selected


def update():

    df = select_movies() 
    x_name = axis_map[x_axis.value]
    y_name = axis_map[y_axis.value]

    p.xaxis.axis_label = x_axis.value 
    p.yaxis.axis_label = y_axis.value 

    source.data = dict(
        x = df[x_name],
        y = df[y_name],
        color=df['color'],
        alpha=df['alpha'],
    )

controls = [xVal_maximun_slider]
for control in controls:
    control.on_change('value', lambda attr, old, new: update())

inputs = column(*controls, width=320, height=1000)
inputs.sizing_mode = "fixed"

l = layout([
    [desc],
    [inputs, p],
], sizing_mode="scale_both")

update()  # initial load of the data

curdoc().add_root(l)

Я использую Google Chrome. Это mensaje, который появляется в консоли: Error at the console

1 Ответ

0 голосов
/ 09 января 2020

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

  source.data = dict(
        x = df[x_name],
        y = df[y_name],
        color=df['color'],
        alpha=df['alpha'],
    )

Ваш ColumnDataSource (на который ссылается source здесь) не имеет столбцов с этими именами.

...