2016-09-08 1 views
0

Я пытаюсь создать единую линейную диаграмму в Bokeh и связывать различные диаграммы в одном кадре данных с выбором взаимодействия. Структура dataframe выглядит примерно так:Bokeh - Данные временных рядов данных данных для выбора взаимодействия

Дата, KPI1, KPI2, KPI3, KPI4 ... ...

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

Я не могу заставить его работать. См. Мой текущий код ниже. Пояснения приведены в комментарии

from app import app 
from flask import render_template,request 

import pandas as pd 
import numpy as np 

from bokeh.embed import components 
from bokeh.plotting import figure 
from bokeh.resources import CDN 
from bokeh.embed import file_html 
from bokeh.plotting import figure, output_file, show 
from bokeh.io import output_file, show, vform 
from bokeh.charts import Scatter, output_file, show 
from bokeh.models import DatetimeTickFormatter 
from bokeh.models import CustomJS, ColumnDataSource, Select 

from app import data 


def createChartHTML(): 


    #Import data from Excel file 
    #Data Structure Looks as follows: Date, KPI 1, KPI 2, KPI 3, KPI 4 ... ... ... 
    allData = pd.read_excel(open('Charts.xlsx', 'rb'), sheetname='DATA') 

    #Get list of column names 
    columnNameList = list(allData.columns.values) 
    #Remove date column from column names 
    columnNameList.pop(0) 


    #Create line chart with markers with initial data 
    p = figure(plot_width=800, plot_height=400,x_axis_type="datetime",title="KPI 1") 
    p.left[0].formatter.use_scientific = False 
    p.line(allData['Date'], allData["KPI 1"], line_width=2) 
    p.circle(allData['Date'], allData["KPI 1"], fill_color="white", size=12) 

    #Create callback 
    source = ColumnDataSource(data=allData) 

    #How do I link this code to the allData dataframe? 
    #I need to pass a parameter from the selection box to this code to select the right data from the dataframe 
    callback = CustomJS(args=dict(source=source), code=""" 
      var data = source.get('data'); 
      var f = cb_obj.get('value') 
      x = data['LINK THIS TO NEWLY SELECTED DATA?????'] 
      y = data['Date'] 
      source.trigger('change'); 
     """) 


    select = Select(title="Option:", value=columnNameList[0], options=columnNameList,callback=callback) 
    layout = vform(select,p) 
    output_file('plot.html', title='Plot') 

    html = file_html(layout, CDN, "my plot") 

    return(html) 

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^