PlotlyでTimeline Chartを描く - aktnk/til GitHub Wiki

一日のうちどの時間帯だけ利用しているか見える化したい。調べてみると、PythonのPlotlyが提供するtimelineを使うでグラフ化できそう。

  • plotly.express.timelineにAPIの説明あり
  • 表示するグラフについて設定を変更することで、軸目盛の位置、軸の太さ等いろいろ変更できる
  • 使い方
    • Plotlyモジュールをインストール
      > pip install plotly
      
    • plotly.expressをインポートし、最低限下記の引数を与えることで、timelineチャートを描くことができる
        import plotly.express as px
      
        fig = px.timeline(df,x_start,x_end,y,color,range_x,range_y,title,height,width)
        fig.show()
      
      • df : データとしてPandasのdataframe、配列や辞書形式でもOK
      • x_start : X軸方向に描くグラフの開始点をdataframeのカラム名や配列等
      • x_end : X軸方向に描くグラフの終了点をdataframeのカラム名や配列等
      • y : y軸に沿って描くグラフの位置をdataframeのカラム名や配列等
      • color : グラフを色分けする際に使うデータをdataframeのカラム名や配列等
      • ranage_x : 表示するx軸の範囲を指定するリスト[(x軸の開始値),(x軸の終了値)]
      • range_y : 表示するy軸の範囲を指定するリスト[(y軸の開始値),(y軸の終了値)]
      • title : グラフのタイトルとして表示する文字列
      • height : グラフの高さpx
      • width : グラフの幅px
    • 注意点
      • x_start,x_end,yの値として日時データを与える場合、Pandasのdataframeの当該カラムはdatetime64[ns]である必要がある
      • x軸として一日のうちの時間を与える場合、x_start,x_endを同じ日にちで与えること
      • y軸の範囲として一か月分のデータを与える場合、range_y=[(その月の1日), (その月の月末日)]を与えること
      • 表示したフラフのy軸方法の幅が正しく表示されない場合、fig.update_traces(width=(x軸の範囲)*60*60*1000)を与えること
      • x軸方向・y軸方向に補助線を引く場合、fig.update_xaxes(…)、fig.update_yaxes(…)をfig.show()の前に呼び出すこと
        fig = px.timeline(...)
        fig.update_xaxes(showline=True,
                         linecolor='grey',
                         linewidth=2,
                         color='grey',
                         ticks='outside',
                         tickcolor='lightgrey',
                         tickformat='%H:%M',
                         showgrid=True,
                         girdash='dot',
                         gridcolor='lightgrey')
        fig.update_yaxes(showline=True,
                         linecolor='grey',
                         linewidth=2,
                         color='grey',
                         ticks='outside',
                         tickcolor='lightgrey',
                         tickformat="'%y/%m/%d",
                         showgrid=True,
                         girdash='dot',
                         gridcolor='lightgrey')
        fig.show()
        
        timeline_plotsample