PyVizhvPlotは簡便にインタラクティブなプロットを作成できる新しいBokeh等のラッパーツールです.この種のツールは細かい調整が難しい場合が多いのですが,hvPlotは比較的簡単に細かい調整ができるので,標準的なプロットツールとしてよいと思います.最大の特徴は拡大やマウスオーバーによる数値の確認等,インタラクティブに仕事ができる点です.Bokehベースのツールの現時点での弱点はグラフのアスペクト比の調整が難しいことで,これはBokeh 1.1で対応されるようですが,それまでは手動での調整しかできないようです.また,Matplotlibに比べると動作が遅いのと,印刷用の高品質のpng等へのファイル出力が面倒です.Matplotlibは設計が古く,微調整が結構大変なので,Bokehのこれらの課題が解決されるのを期待しています.

デフォルトでのプロット

dfをindexが時系列のpandasのDataFrameとし,'kion'と'sped'カラムが含まれているとします.これは気象庁の気象官署データ時別値を例にしたものです.デフォルトでプロットするには以下のようにします.


import hvplot.pandas
df[['kion','sped']].hvplot()

微調整したプロット

次に,とりあえず1変数を選び('kion'を選びます),きめ細かく調整した例です.hvPlotの引数では調整できない項目でも,関数hook(plot, element)を定義すれば,Bokehのオプションを調整できるようになります.

関数hookの定義


def hook(plot, element):
    plot.handles['xaxis'].axis_label_text_font_style = 'normal'
    plot.handles['yaxis'].axis_label_text_font_style = 'normal'

この関数はx軸とy軸の軸ラベルのフォントを斜体(デフォルト)ではなく標準にします.なぜかデフォルトは斜体になっています.
hook関数をdf['kion'].hvplot().opts(hooks=[hook])のように使います.hook関数はBokehのパラメーターを用いて記述します.

オプション調整した時系列プロット

以下に例を示しますが,xlimはx軸の範囲,xticksはx軸の主目盛りの個数の目安,ylabelはy軸のタイトル,titleは図のタイトル,widthは図の横幅のピクセル数(ただし,凡例等すべて含めた幅なので,プロット自体の幅ではないため,アスペクト比の調整は面倒です),heightは図の縦幅のピクセル数,line_colorは線の色,line_widthは線の幅,fontsize={'xticks':12, 'yticks': 12, 'ylabel':14}は項目別のフォントサイズを項目をキー,値をサイズとする辞書で指定し,この例では,x軸ラベルを12pt,y軸ラベルを12pt,y軸タイトルを14ptにすることを意味します.最後の.opts(hooks=[hook])は上述の通り,hvPlotの引数では指定できない項目を含め,Bokehの機能での微調整を行います.また,xlimは時系列の範囲指定なので,pandasのdatetimeとして指定しています.


df['kion'].hvplot(xlim=(pd.datetime(1991,1,2), pd.datetime(1991,3,4)),\
xticks=10,\
ylabel='Temperature (degC)', ylim=(-4,35), yticks=10,\
width=600, height=200,\
line_color='red', line_width=0.5,\
fontsize={'xticks':12,'yticks':12 ,'ylabel':14},\
title='').opts(hooks=[hook])