#!/usr/bin/env python # coding: utf-8 # In[17]: from bokeh.charts import Bar,Scatter,Histogram,BoxPlot from bokeh.io import push_notebook, show, output_notebook from bokeh.layouts import gridplot from bokeh.sampledata.autompg import autompg as df import pandas as pd from bokeh.layouts import row,column from bokeh.models import HoverTool output_notebook() # # サンプルデータ # In[2]: df.head() # # グラフの動きを同期させる例(Linking Plots) # In[18]: s1 = Bar(df, 'cyl', values='mpg', title="Total MPG by CYL") s2 = Bar(df, 'cyl', values='accel', title="Total Accel by CYL") s2.x_range=s1.x_range s2.y_range=s1.y_range p = gridplot([[s1, s2]], toolbar_location=None) show(p) # x_rangeを同一にすると横方向に同期、y_rangeを同一にすると縦方向に同期される # In[ ]: # In[19]: s1 = Bar(df, 'cyl', values='mpg', title="Total MPG by CYL") s2 = Bar(df, 'cyl', values='accel', title="Total Accel by CYL") s2.x_range=s1.x_range s2.y_range=s1.y_range show(row(s1,s2)) #こっちのほうが楽かも。無設定でツール出るし # http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/linking.html#userguide-interaction-linking # # HoverToolの例(マウスカーソル上にtipが表示される) # In[23]: hover = HoverTool(tooltips = [('cyl','@cyl'),('name','@name')]) #まずHoveToolのインスタンスを作成する。表示したいカラム名を@で指定する # ただし、予期したとおり動かないことが多い。例えば、この例では@nameの方は表示されない。 # 詳細は https://github.com/bokeh/bokeh/issues/4347 を参考 # ローレベルのPlotは問題ないが,ハイレベルのChartはModelを使ってdfを再度変換してるようだ。 # また、グラフ描画に不要なデータはClientに送られない。下の例ではname属性はグラフ描画に不要なので、削られてしまい、???になる。 # なお、'car name'のように空白を含むカラム名もエラーになるが、'car_name','@{car name}'という風に{}で囲むと走るらしい # In[24]: scatter = Scatter(df, x='mpg', y='hp', color='cyl', title="HP vs MPG (shaded by CYL)", xlabel="Miles Per Gallon", ylabel="Horsepower",tools = [hover]) show(scatter) # # ヒストグラムと散布図 # In[20]: hist = Histogram(df,values='mpg',color='cyl') show(hist) # In[21]: box = BoxPlot(df,values='mpg',label='cyl') show(box) # In[25]: hist = Histogram(df,values='mpg',color='cyl') box = BoxPlot(df,values='mpg',label='cyl') box.y_range = hist.y_range show(row(hist,box)) #軸のスケールが一致しないと描画エラーになる。ま、そりゃそうだが…