質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2032閲覧

Python,BokehでY軸を時間HH:MM:SSとX軸を日にちYYYY-MM-DDにする方法

Non-Face

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/08/27 15:58

現在PythonでBokehを使ってグラフ作成(散布図)をしているのですが、グラフの軸とデータがうまく組み合わせられないので質問させていただきました。
下記は完成時のイメージ
成功した場合のイメージ
このグラフの様にY軸を00:00:00から24:00:00に固定し、それにデータを合わせていく形にしたいです。そしてX軸はデータのない日にちでも表示され毎日表示されるようにしたいと思っています。

いろいろ調べてみましたがよくわからなかったので簡単なプログラムを下に書きます。

python

1import matplotlib.pyplot as plt 2from matplotlib impost dates 3 4xlist=['2018-08-24', '2018-08-24', '2018-08-25', '2018-08-25', '2018-08-25', '2018-08-23', '2018-08-23', '2018-08-21', '2018-08-21', '2018-08-19', '2018-08-17', '2018-08-05', '2018-07-28', '2018-07-18', '2018-07-18', '2018-07-17', '2018-07-15', '2018-07-11', '2018-07-10', '2018-07-09'] 5 6ylist=['19:46:00', '3:30:00', '3:29:00', '3:26:00', '2:52:00', '14:36:00', '2:45:00', '23:27:00', '3:56:00', '4:20:00', '2:49:00', '22:47:00', '22:22:00', '13:52:00', '1:49:00', '17:48:00', '15:22:00', '2:12:00', '18:27:00', '21:15:00'] 7 8p=figure(plot_width=400, plot_height=400, x_axis_type="datetime") 9p.xaxis.axis_label='date' 10p.yaxis.axis_label='time' 11p.circle(xlist, 12 ylist 13 )

実行結果
このように真っ白です
以前質問させていただいたmatplotlibの場合はX軸,Y軸の順番はバラバラでしたがかろうじてデータ内容は表示されていました。しかし今回のBokehではX軸,Y軸は表示されずデータも表示されていません。実際に作るグラフはデータ量が大量で横にスクロールできるようにしていきたいと思っています。
これをY軸はHH:MM:SSに、X軸はデータにない日にちも表示し毎日を表示したいのですが解決方法がわかるかたはご教示お願いします

実行環境

windows 10
python 3.6.6
matplotlib 2.2.3
bokeh 0.13.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

基本的には matplotlibの時と同じく、xlistおよびylistを文字列ではなく datetime型のデータに変換し、X軸とY軸に datetime用のLocatorおよびFormatter を設定することになります

Python

1from bokeh.io import show 2from bokeh.plotting import figure 3from bokeh.models import DatetimeTickFormatter 4from datetime import datetime as dt 5import math 6 7xlist=['2018-08-24', '2018-08-24', '2018-08-25', '2018-08-25', '2018-08-25', '2018-08-23', '2018-08-23', '2018-08-21', '2018-08-21', '2018-08-19', '2018-08-17', '2018-08-05', '2018-07-28', '2018-07-18', '2018-07-18', '2018-07-17', '2018-07-15', '2018-07-11', '2018-07-10', '2018-07-09'] 8 9ylist=['19:46:00', '3:30:00', '3:29:00', '3:26:00', '2:52:00', '14:36:00', '2:45:00', '23:27:00', '3:56:00', '4:20:00', '2:49:00', '22:47:00', '22:22:00', '13:52:00', '1:49:00', '17:48:00', '15:22:00', '2:12:00', '18:27:00', '21:15:00'] 10 11 12# xlist,ylistを datetime型に変換 13xlist = [dt.strptime(d, '%Y-%m-%d') for d in xlist] 14ylist = [dt.strptime(d, '%H:%M:%S') for d in ylist] 15 16# データをプロット 17p = figure(x_axis_type='datetime', 18 y_axis_type='datetime', 19 x_range=(dt.strptime('2018-7-9','%Y-%m-%d'), 20 dt.strptime('2018-8-24', '%Y-%m-%d')), 21 y_range=(dt.strptime('00:00','%H:%M'), 22 dt.strptime('23:59','%H:%M'))) 23p.circle(xlist, ylist) 24 25# X軸の設定 26x_format = "%m/%d" 27p.xaxis.formatter = DatetimeTickFormatter( 28 seconds=[x_format], 29 minutes=[x_format], 30 hours=[x_format], 31 days=[x_format], 32 months=[x_format], 33 years=[x_format] 34) 35p.xaxis.major_label_orientation = math.radians(90) 36# Y軸の設定 37y_format = "%H:%M" 38p.yaxis.formatter = DatetimeTickFormatter( 39 seconds=[y_format], 40 minutes=[y_format], 41 hours=[y_format], 42 days=[y_format], 43 months=[y_format], 44 years=[y_format] 45 ) 46show(p)

投稿2018/08/27 23:50

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Non-Face

2018/08/28 13:22

ご回答ありがとうございます。何週間も調べてもわからず諦めていましたがこんなにも希望通りの解答をいただけてとても感動しております。自分のググる力が無いせいなだけかもしれませんが。ついでお伺いしたいのですが、Y軸を00:00から23:59までに固定して縦にスクロールできないようにしたいのですが方法はありますか?よろしくお願いします。
Non-Face

2018/08/31 14:03

解決しました!! 丁寧な説明ありがとうございました。 また何かありましたらよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問