web-dev-qa-db-ja.com

ボケでのcolumnDataSourceの目的

私はボケが初めてで、columnDataSourceの機能を理解しようとしています。それは多くの場所に現れますが、その目的とそれがどのように機能するかは不明です。誰かを照らすことはできますか?これがばかげた質問ならお詫びします...

18
rpj

ColumnDataSourceは、ボケグラフのデータが格納されるオブジェクトです。 ColumnDataSourceを使用せず、Python辞書、pandasデータフレームなど)を使用してグラフに直接フィードすることを選択できますが、ポップアップウィンドウなどの特定の機能についてはユーザーがグリフの上にマウスを置いたときにデータ情報を表示すると、ColumnDataSourceの使用が強制されます。そうしないと、ポップアップウィンドウでデータを取得できません。その他の用途は、データをストリーミングする場合です。

辞書とpandasデータフレームからColumnDataSourceを作成し、次にColumnDataSourceを使用してグリフを作成できます。

14
multigoodverse

これはうまくいくはずです:

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