2017-12-05 28 views
1

Bokehから棒グラフを作成する際に、Datetime x軸を使用しようとしています。私はいくつかの時間分解能を使用していますが、私はその週の間を除いてすべてを動作させることができます。私はこのようになりますパンダのデータフレームを持っている(私は参照のための「ウィーク」列を追加し、それはとどまるべきではありません)Bokeh日時軸を使用して週をプロットする

Timestamp ResultID 
2017-12-03 106 
2017-11-26 381 
2017-11-19 406 
2017-11-12 662 
2017-11-05 656 
2017-10-29 638 
2017-10-22 429 
2017-10-15 784 

Output with date

あなたは、ラベルの位置がずれて、時には欠けていることがわかります。 Bokehは、週の最初の日であるかどうかに関係なく、常に月の最初の日を表示しているようです。これは、他のラベルを位置からずらします。私はこれを行うのに役立つどんなドキュメンテーションも見つけられないようです。カテゴリカル軸を使用することはできません。なぜなら、7つの最近のビンだけを表示するように範囲を設定する方法が壊れるからです。また、カレンダーの週ラベルを表示するためにラベルのフォーマットを変更しようとしましたが、そこには運がありません。ラベルを適切な列に一致させる方法に関するアイデアはありますか?



    bintime = 'W' 
    bins = {'h' : '%Y-%m-%d %H:%M', 'D' : '%F', 'W' : '%F', 'M' : '%Y-%m'} 
    widths = {'h' : 3600000, 'D' : 86400000, 'W' : 604800000, 'M' : 2419200000} 
    pad = 0.9 

    source = ColumnDataSource(df) 

    now = np.datetime64(datetime.datetime.now()) 

    if bintime == 'M': 
     padspace = now + np.timedelta64(1*30, 'D') 
     dispdelta = now - np.timedelta64(7*30, 'D') 
    else: 
     padspace = now 
     dispdelta = now - np.timedelta64(7, bintime) 

    ranges = ['hours', 'days', 'months'] 

    #xrange = df.DT.tolist() 
    xrange = (dispdelta, padspace) 

    output = figure(plot_height=300, width=800, title="MPL Output", x_range=xrange, tools ='xpan,reset,xzoom_in,xzoom_out') 
    output.vbar(x='Timestamp', top='ResultID', width=widths[bintime]*pad, source=source) 
    output.xaxis.formatter=DatetimeTickFormatter(hours=bins[bintime], days=bins[bintime], months=bins[bintime]) 
    show(output) 

答えて

2

他にも同様の問題がある場合に備えて転記しました。

xaxisのテロップ方法を変更する必要があります。 x_axis_typeがdatetimeの場合、Bokehは自動的にDatetimeTicker methodを使用します。これは、データ範囲に最も適したタイプを検出します。この場合は、月の第1、第8、第15、および第22日にダニを追加するDaysTickerです。これは、ラインやその他のエリアグラフでは問題ありませんが、ダニとバーを並べるために必要な週数を並べるようにします。あなたはこれを行うことができます。

tickers = pd.to_datetime(df.index.values).astype(int)/10**6 

たり、日時フィールドを取り、ミリ秒エポックの整数(numpyの日時はナノ秒であるため、10 ** 6である)に変換し、その後 output.xaxisを追加します。 ticker = FixedTicker(ticks = tickers)

これは、ティックをバーの中心に合わせるように強制します。このように、データフレームを再サンプリングしても、ラベルは自動的に一致します。

関連する問題