2015-11-23 14 views
15

私はipythonノートブックでbokehを使用しています。bokehプロットのx軸をdatetimesとして設定するにはどうすればよいですか?

私は日付時刻を含むパンダのデータフレームを使用してボケで折れ線グラフをプロットしたい:

import pandas as pd 
from datetime import datetime as dt 
from bokeh.io import output_notebook 
from bokeh.charts import Bar, Line, show 

df = pd.DataFrame(data=[1,2,3], 
        index=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3)], 
        columns=['foo']) 

output_notebook() 
show(Line(df)) 

はしかし、ボケ味は、マイクロ秒を使用しています!どうしてこれなの?どうすれば修正できますか?

bokeh plot of line

答えて

21

それは大丈夫でしょうか?

enter image description here

import pandas as pd 
from math import pi 
from datetime import datetime as dt 
from bokeh.io import output_file 
from bokeh.charts import show 
from bokeh.models import DatetimeTickFormatter 
from bokeh.plotting import figure 

df = pd.DataFrame(data=[1,2,3], 
        index=[dt(2015, 1, 1), dt(2015, 1, 2), dt(2015, 1, 3)], 
        columns=['foo']) 
p = figure(plot_width=400, plot_height=400) 
p.line(df.index, df['foo']) 
p.xaxis.formatter=DatetimeTickFormatter(
     hours=["%d %B %Y"], 
     days=["%d %B %Y"], 
     months=["%d %B %Y"], 
     years=["%d %B %Y"], 
    ) 
p.xaxis.major_label_orientation = pi/4 
output_file('myplot.html') 
show(p) 
+0

はどのようにあなたのグラフのX軸は1月1日2回、その後2を示していますし、 1月3日? – multigoodverse

+0

@ A.Sそれはb/cです。可能なすべての時間分解能は同じフォーマッタを持っています。よりスケールに合ったものにすることはうまくいくはずです。 –

+0

これはかなりうまくいく、ありがとう。しかし、すべての異なる時間範囲(時間、日、月、年)のフォーマットを定義する必要があるのだろうか?あなたは何か考えていますか? – Brandt

1

質問が最初に掲載されて以来FWIW、デフォルトの動作が変更されました。元のコードは現在得られます

outcome from code

20

ボケ0.12.3のとおり、あなたが今行うことができます。

p = figure(..., x_axis_type='datetime', ...) 
+1

誰かがこの答えを上げてください!コードの一部を大幅に改訂した後、より関連性の高い回答を上げる方法が必要です。私の暴言をメタに移します:) – famargar

関連する問題