web-dev-qa-db-fra.com

Objectif de columnDataSource dans bokeh

Je suis nouveau dans le bokeh et j'essaie de comprendre ce que fait columnDataSource. Il apparaît dans de nombreux endroits, mais je ne suis pas sûr de son objectif et de son fonctionnement. Quelqu'un peut-il illuminer? Toutes mes excuses si c'est une question idiote ...

18
rpj

ColumnDataSource est l'objet où sont stockées les données d'un graphe Bokeh. Vous pouvez choisir de ne pas utiliser une ColumnDataSource et d'alimenter votre graphique directement avec Python, pandas dataframes, etc.), mais pour certaines fonctionnalités telles que la présence d'une fenêtre contextuelle affichant des informations sur les données lorsque l'utilisateur passe la souris sur des glyphes, vous êtes obligé d'utiliser un ColumnDataSource, sinon la fenêtre contextuelle ne pourra pas obtenir les données. D'autres utilisations pourraient être lors du streaming de données.

Vous pouvez créer une ColumnDataSource à partir de dictionnaires et pandas dataframes, puis utiliser ColumnDataSource pour créer les glyphes.

14
multigoodverse

Cela devrait fonctionner:

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à.
2
amunnelly