2017-11-29 10 views
0

私はBokehとチャートを作ろうとしており、私はdatetimeのリストを持っています。チャートのx軸としてタイムスタンプを使用するには?

datetimeを私のx軸に設定したいと思いますが、Bokehがこのグラフを正しく表示できないようです。

誰にでも良い解決策がありますか?

ありがとうございます。

datetime = ['2017-11-23 20:56:16', 
      '2017-11-23 20:56:47', 
      '2017-11-23 21:00:56', 
      '2017-11-23 21:01:26'] 

p = figure(x_axis_type="datetime", plot_width=800, plot_height=350, title="the trend") 

p.xaxis.axis_label = "time" 
p.yaxis.axis_label = "price" 
p.line(datetime, price, line_width=2) 

output_file("test.html") 
show(p) 
+0

編集あなたの質問のために

Graph2

。 – aaron

答えて

0

変数としてキーワードを使用しないでください。あなたは避けるべき変数としてdatetimeを使用しています。時間のデータ型は常に受け入れられたdatetime形式でなければなりません。

timestampのコードが変更されたことを、x軸として確認してください。

注:データは非常に小さいため、同じ日に数時間だけ表示され、データが非常に大きい場合は、日付、時刻、年が表示されます。

グラフ:このような

datetimes = ['2017-11-23 20:56:16', 
      '2017-11-23 20:56:47', 
      '2017-11-23 21:00:56', 
      '2017-11-23 21:01:26'] 

datetimes = np.array(datetimes, dtype=np.datetime64) 

p = figure(x_axis_type="datetime", plot_width=800, plot_height=350, title="the trend") 
p.xaxis.axis_label = "time" 
p.yaxis.axis_label = "price" 
p.line(datetimes, [45,67,70,60], line_width=2) 
show(p) 

出力ルック:Graph

私はいくつかのサンプルデータを追加し、日付を示し、別のグラフを作りました。

date_range = pd.date_range('2017-11-23 00:00:00', periods=72, freq='H') 
price = np.random.randint(20,100,72) 
p = figure(x_axis_type="datetime", plot_width=800, plot_height=350, title="the trend") 
p.xaxis.axis_label = "time" 
p.yaxis.axis_label = "price" 
p.line(date_range, price, line_width=2) 
show(p) 

グラフは次のようになります。現在の出力を表示するための基準Bokeh

+0

ありがとう! –

0

あなたdatetimeリストは、これらがdatetimeオブジェクト(またはパンダと同等)である必要があり、文字列が含まれています。

(ところで、混乱を避けるために、この場合datetimeのように、変数のモジュール名を使用しないように、より良いかもしれません。)

あなたはdatetimeモジュールとそれらを解析することができますが、パンダにも便利です例えば:

import pandas as pd 

datetime = pd.to_datetime(['2017-11-23 20:56:16', 
          '2017-11-23 20:56:47', 
          '2017-11-23 21:00:56', 
          '2017-11-23 21:01:26']) 

あなたはDatetimeTickFormatterと軸ラベルの書式設定を調整することができます。

編集:あなたは日付を解析するためにパンダを使用したくない場合は 、それはこのようなdatetimeモジュールを行うことができます。

from datetime import datetime 

dates = ['2017-11-23 20:56:16', 
     '2017-11-23 20:56:47', 
     '2017-11-23 21:00:56', 
     '2017-11-23 21:01:26'] 

dates = list(map(lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S'), dates)) 
関連する問題