0
0

bokeh: 軸範囲を指定せずに、datetimeのデータ1個をプロットすると、軸の表示はマイクロ秒になる

Last updated at Posted at 2024-05-21

環境

  • Python 3.12.1
  • bokeh 3.4.1
  • pandas 2.2.2

やりたいこと

横軸が日付である折れ線グラフを描画したいです。

以下のコードで折れ線グラフを描画できました。

sample.py
from bokeh.io import output_file, save
from bokeh.plotting import figure
import pandas as pd

df = pd.DataFrame({"date": ["2024-01-01", "2024-02-01"], "value": [10, 20]})
df["dt_date"] = pd.to_datetime(df["date"])

fig = figure(width=400, height=400, x_axis_type="datetime")
fig.line(x=df["dt_date"], y=df["value"])
fig.scatter(x=df["dt_date"], y=df["value"])

output_file("output.html")
save(fig)

image.png

問題

プロットする点が1点しかない場合、横軸が000000usとマイクロ秒で表示されました。

df = pd.DataFrame({"date": ["2024-01-01", "2024-02-01"], "value": [10, 20]})
df["dt_date"] = pd.to_datetime(df["date"])
df = df.iloc[1:]

image.png

"Wheel zoom"機能を使って表示範囲を縮小すれば、01/01を表示させることができますが、できれば最初から01/01を表示させたいです。

解決

figure()x_range引数で、軸の範囲を「前日から翌日」で設定することで、解決できまし指定しました。

kwargs = {}
if len(df) == 1:
    center_datetime = df["dt_date"][0]
    next_day = center_datetime + datetime.timedelta(days=1)
    previous_day = center_datetime - datetime.timedelta(days=1)
    x_range = (previous_day, next_day)
    kwargs["x_range"] = x_range
    
fig = figure(width=400, height=400, x_axis_type="datetime", **kwargs)

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0