TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

matplotlibでグラフをインタラクティブに変更して見やすくする

matplotlibで複数系列の時系列グラフなどを表示した場合、グラフの線が太く重なっている箇所の詳細が把握しにくい。
特にJupyter Notebookでブラウザで表示している場合は、コードで見栄えを調整する必要がある。

Jupyter QtConsoleで、「%matplotlib qt」とIPythonのマジックコマンドでグラフのバックエンドをQTに変更して、GUIでグラフを表示すると、インタラクティブに拡大縮小や、グラフの線の変更、系列の表示/非表示などが行える。

グラフ表示する時系列データのロード

pandas-datareaderで、yahooのNIKKEI225の株価データをロードする。

import pandas_datareader as pdr
price = pdr.DataReader("^N225", "yahoo", "1984/1/4", "2019/10/4")
Jupyter Notebookでグラフ表示

Jupyter Notebookで表示すると以下のようになる。

price.plot()

f:id:TadaoYamaoka:20191005221057p:plain

縦軸がVolumeに合わされているため、Open、Closeなどのデータが下の方に表示されている。
コードで非表示にする必要がある。

price[['High','Low','Open','Close','Adj Close']].plot()

f:id:TadaoYamaoka:20191005221425p:plain

縦軸のスケールが調整されて、株価の変動がわかるようになったが、Adj Closeの線しか見えない。
一部を拡大してみるにはまたコードを記述する必要がある。面倒である。

Qtでグラフ表示

次に、Jupyter QtConsoleで表示する。

%matplotlib qt
price.plot()

f:id:TadaoYamaoka:20191005221800p:plain

初期表示は、Jupyter Notebookと同じように表示される。
しかし、コードを書かなくてもGUI操作で見た目を変更できる。

操作については、以下のページにマニュアルがある。
Interactive navigation — Matplotlib 3.1.1 documentation

Volumeを非表示にして、
f:id:TadaoYamaoka:20191005222046p:plain
線の幅を調整して、
f:id:TadaoYamaoka:20191005222120p:plain
マウスで範囲指定して一部を拡大して、見たい箇所にドラッグすることができる。
f:id:TadaoYamaoka:20191005222650p:plain

2019/10/6 追記

Jupyter Notebookでも

%matplotlib notebook

とすることで、インタラクティブなグラフが描画される。
f:id:TadaoYamaoka:20191006234138p:plain

ただし、移動・拡大縮小はできるが、系列の表示/非表示などはできない。
また、Google Colabでは使用できない。

2019/10/19 追記

複数系列をグラフ表示する場合、線の太さを細くしたい場合がある。
系列が多いと後からGUIで設定するのはめんどくさい。
線の太さは、表示時に一括で設定できる。

price.plot.line(linewidth=0.5)