2016-01-24 3 views
7

私はPandasのデータフレームを、年と数値を含むDateTimeの列でプロットするためにBokehを使用しようとしています。 DateTimexと指定されている場合、動作は期待通りです(x軸の年)。しかし、​​を使用してDateTime列をデータフレームのインデックスに変換し、にyと指定すると、x軸の時間がミリ秒単位で表示されます。最小限の例BokehのTimeSeriesでインデックスを持つデータフレームを使用

import pandas as pd 
import numpy as np 
from bokeh.charts import TimeSeries, output_file, show 

output_file('fig.html') 
test = pd.DataFrame({'datetime':pd.date_range('1/1/1880', periods=2000),'foo':np.arange(2000)}) 
fig = TimeSeries(test,x='datetime',y='foo') 
show(fig) 

output_file('fig2.html') 
test = test.set_index('datetime') 
fig2 = TimeSeries(test,y='foo') 
show(fig2) 

これは予期しない動作またはバグですか?私は両方のアプローチで同じ画像が期待されます。

乾杯!

+0

:安定bokeh.plotting APIを使用する同等のコードでは、期待される結果が得られます。興味深いことに、 'fig2 = TimeSeries(test、y = 'foo')'行の後、 'test'は' datetime'データのインデックスと 'index'という新しい列の両方を含むように変更されました。単にデータフレームをプロットするだけでデータが変更されるのはちょっと驚きです。 – Jake

+0

良いキャッチ、私は気づいていなかった。私はこれを[問題](https://github.com/bokeh/bokeh/issues/3763)として報告しました。 – manu

答えて

0

Bokehは内部的な理由でインデックスを追加するのに使用されましたが、あまり最近のバージョン(> = 0.12.x以上)ではインデックスを追加しません。また、bokeh.charts APIが廃止され、削除されたことにも注目してください。これは、あまりにも、私には矛盾に見える

import pandas as pd 
import numpy as np 
from bokeh.plotting import figure, output_file, show 
from bokeh.layouts import row 

output_file('fig.html') 

test = pd.DataFrame({'datetime':pd.date_range('1/1/1880', periods=2000),'foo':np.arange(2000)}) 

fig = figure(x_axis_type="datetime") 
fig.line(x='datetime',y='foo', source=test) 

test = test.set_index('datetime') 

fig2 = figure(x_axis_type="datetime") 
fig2.line(x='datetime', y='foo', source=test) 
show(row(fig, fig2)) 

enter image description here

関連する問題