ここのところmatplotlib一本やりでチャートを作っておりました。
しかし、jupyter notebookを動かすディレクトリをC→Dに動かしたところで問題が・・・。再びmatplotlibで作ったチャートの日本語が豆腐化し始めたのです。
どうして、C→Dにとか思われるかもしれませんが、日々のデータを載せたjupyter bookを残したかったんですよね。あとからフォルダわけしたらよいやんって話ですが、面倒くさがり屋の自分がそんなことをやるわけがないと現時点で気づけたので、最初にやっておきたかったんですよね。
しかし、そうすると再びの豆腐化・・・
matplotlib引退!
— まざ (@mazarimono) June 27, 2018
との流れから、ふたたびbokehを使うことにしました。しかしそこにはよく分からない問題が待ち構えていました。
もくじ
白ぬけのチャートが表示された
何をいっているか分からないかもしれませんが、全く何も描画されていないバーチャートが表示されました。
バーチャートなんて簡単やろという感じで、下のようなコードを書きました。
from bokeh.io import output_notebook from bokeh.plotting import figure, show output_notebook() p = figure(width=800, height=300) p.vbar(x = df.index, width = 0.3, top = df['chg']) show(p)
すると表示されたのは・・・
うん。一応ツールは出てるから。でも中身がないな・・・
ちなみに今回扱っているデータは下のようなセクター別株価動向のデータです。インデックスにセクター名、そのほかは数値データが入っています。
ドキュメントを見ながら色々試してみる
ローソク足なんかはこのような書き方で良いのですが、何が駄目なのでしょうか?
ドキュメントを見てみます。
output_file("bars.html") fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'] p = figure(x_range=fruits, plot_height=250, title="Fruit Counts", toolbar_location=None, tools="") p.vbar(x=fruits, top=[5, 3, 4, 2, 4, 6], width=0.9) p.xgrid.grid_line_color = None p.y_range.start = 0 show(p)
これを見るとfigure(x_range=fruits ・・・)とx_rangeの設定を何か行っていることと、リストのデータを入れているということがわかりました。
というわけでこれが通ったら一番楽に終われそうだと、上のコードにx_range=df.indexを加えてみました。
from bokeh.io import output_notebook from bokeh.plotting import figure, show output_notebook() p = figure(x_range=df.index, width=800, height=300) p.vbar(x = df.index, width = 0.3, top = df['chg']) show(p)
すると、一行目を指定して
ValueError: Unrecognized range input: 'Index ~~
と怒られました。
次に、取り扱いたいデータを各々リスト化して、渡すということを試しました。
sectors = [] atai = [] for i in df.index: sectors.append(i) atai.append(df.loc[i, 'chg']) p = figure(x_range=sectors, height=300, width=700) p.vbar(x= sectors, width=0.4, top=atai) p.xaxis.major_label_orientation = math.pi / 2 show(p)
こうするとなんと動いてくれました。
まとめ
エラーが出た場合の対処って難しくて、こうやって書くんやぞってのは載っているけど、僕のと全然違うしなーみたいな感じだとお手上げになります。
結構stackoverflowが解決してくれるわけですが、これって英語でどう書いて検索してよいのかなんてときは、その技も使えません。
そんな時にはオレオレ主義でなく、ドキュメントなどに書かれている感じにデータを作り直すというのが手っ取り早い解決法なのかもしれません。
今回はpandasとの相性が悪かったということなのでしょうか?まぁよく分からないけど、色々あるなと思わされました。
Bokehのよさ
ちょっとだけここでbokehの良さに触れておきますと、拡大縮小などが簡単にできることです。
例えば先日みた散布図だと、重なっているところが何かわかりませんが、bokehだとちょっと拡大してやるだけで、その部分に何があるのかすぐわかります。
文字同士が被りすぎて何かわからんなーってなっても安心してください。拡大できますから!
というわけでbokehはなかなか便利です。
![PythonユーザのためのJupyter[実践]入門 PythonユーザのためのJupyter[実践]入門](https://images-fe.ssl-images-amazon.com/images/I/51ZeYjBnmfL._SL160_.jpg)
- 作者: 池内孝啓,片柳薫子,岩尾エマはるか,@driller
- 出版社/メーカー: 技術評論社
- 発売日: 2017/09/09
- メディア: 大型本
- この商品を含むブログ (1件) を見る