2016-04-19 6 views
6

Jestem nowy w bokeh i próbuję dowiedzieć się, co robi columnDataSource. Pojawia się w wielu miejscach, ale nie jestem pewien jego celu i sposobu działania. Czy ktoś może się oświetlić? Przepraszam, jeśli to głupie pytanie ...Cel columnDataSource w bokeh

+2

Jeśli jesteś zaznajomiony z R lub Pand 'DataFrame' obiektów The' ColumnDataSource' jest zasadniczo prostsza wersja tego. Jest zbiorem tablic danych (kolumn), do których można się odwoływać według nazw. Właściwa struktura wewnętrzna jest po prostu słownikiem, który odwzorowuje łańcuchy na listy/tablice. Jest to podstawowy sposób przenoszenia danych z Pythona do biblioteki przeglądarki BokehJS. – bigreddot

Odpowiedz

4

ColumnDataSource to obiekt, w którym przechowywane są dane wykresu Bokeh. Możesz nie używać ColumnDataSource i podawać swój wykres bezpośrednio za pomocą słowników Python, ramek danych pand, itp., Ale w przypadku niektórych funkcji, takich jak wyświetlanie okienka z informacjami o danych, gdy użytkownik najedzie myszą na glify, będziesz zmuszony użyć ColumnDataSource inaczej okno wyskakujące nie będzie w stanie uzyskać danych. Inne zastosowania byłyby podczas przesyłania strumieniowego danych.

Możesz utworzyć ColumnDataSource ze słowników i ramek danych pandy, a następnie użyć ColumnDataSource do utworzenia glifów.

+1

Czy możesz dodać mały przykład, jak zrobić to, co napisałeś w odpowiedzi? Powiedz szereg czasowy, w którym chcesz zobaczyć dane po najechaniu myszą nad wykresem – famargar

1

To powinno działać:

import pandas as pd 
import bokeh.plotting as bp 
from bokeh.models import HoverTool, DatetimeTickFormatter 

# Create the base data 
data_dict = {"Dates":["2017-03-01", 
        "2017-03-02", 
        "2017-03-03", 
        "2017-03-04", 
        "2017-03-05", 
        "2017-03-06"], 
      "Prices":[1, 2, 1, 2, 1, 2]} 

# Turn it into a dataframe 
data = pd.DataFrame(data_dict, columns = ['Dates', 'Prices']) 

# Convert the date column to the dateformat, and create a ToolTipDates column 
data['Dates'] = pd.to_datetime(data['Dates']) 
data['ToolTipDates'] = data.Dates.map(lambda x: x.strftime("%b %d")) # Saves work with the tooltip later 

# Create a ColumnDataSource object 
mySource = bp.ColumnDataSource(data) 

# Create your plot as a bokeh.figure object 
myPlot = bp.figure(height = 600, 
       width = 800, 
       x_axis_type = 'datetime', 
       title = 'ColumnDataSource', 
       y_range=(0,3)) 

# Format your x-axis as datetime. 
myPlot.xaxis[0].formatter = DatetimeTickFormatter(days='%b %d') 

# Draw the plot on your plot object, identifying the source as your Column Data Source object. 
myPlot.circle("Dates", 
      "Prices", 
      source=mySource, 
      color='red', 
      size = 25) 

# Add your tooltips 
myPlot.add_tools(HoverTool(tooltips= [("Dates","@ToolTipDates"), 
            ("Prices","@Prices")])) 


# Create an output file 
bp.output_file('columnDataSource.html', title = 'ColumnDataSource') 
bp.show(myPlot) # et voilà.