⏱️

matplotlibでx軸がdatetimeの場合に表示形式を変更する方法

2022/02/02に公開

X軸がdatetime型のプロットをするとデフォルトだと軸表示が04-12:30という形式で表示されます。
日を跨ぐプロットの場合は良いのですが、跨がない場合は日の表示を省きたいのでその方法を調べました。

実現方法としてはset_major_formattermatplotlibライブラリのdatesを使います。

matplotlib.datesの公式ページはここ
https://matplotlib.org/stable/api/dates_api.html

以下実行確認のversionはpython3.8.8

まずは何も指定せずにdatetimeをx軸にしてプロットします。

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime 

dts = [
    datetime(2022, 2, 1, 12, 00, 00),
    datetime(2022, 2, 1, 15, 00, 00),
    datetime(2022, 2, 1, 18, 00, 00)
]

df = pd.DataFrame(
    {
    'x': dts,
    'y': [1, 2, 3],
    }
)

plt.figure()
plt.plot(df['x'], df['y'], marker='.')

作成される画像

ちょっと見づらい。

1. figureで指定する場合

set_major_formatterで以下の方に指定してあげると実現できました。

from matplotlib import dates as mdates

plt.figure()
plt.plot(df['x'], df['y'], marker='.')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))

作成される画像(形式変更後)

うむ、スッキリ!!

2. axisで指定する場合

axisで形式指定する場合は以下のようにすれば良いようです。1.と同様の画像が生成されます。

fig, ax = plt.subplots()
ax.plot(df['x'], df['y'], marker='.')
ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))

(参考)
https://bunsekikobako.com/setting_ticks_by_matplotlib_dates/

指定できる表示形式の一覧

よく忘れるので指定できる形式が確認できるページもおいておきます。
色々な形式で表示できます。
https://atmarkit.itmedia.co.jp/ait/articles/2111/09/news015.html

Discussion