Quick and dirty workaround using FuncFormatter
and MultipleLocator
import pandas as pd
import matplotlib.pyplot as plt
from datetime import timedelta, datetime
from matplotlib.ticker import MultipleLocator, FuncFormatter
NS_PER_SEC = 1000000000 # pandas.Timedelta are stored as nanoseconds internally
tick_interval = timedelta(minutes=15)
# Example DataFrame
data = {
"runtime": [timedelta(hours=2, minutes=20), timedelta(minutes=30, seconds=45)],
"date": [datetime(2022, 10, 1), datetime(2023, 10, 2)],
}
df = pd.DataFrame(data)
def pd_timedelta_formatter(x, pos):
td = timedelta(seconds=x / NS_PER_SEC)
return str(td)
fig, ax = plt.subplots()
ax.yaxis.set_major_formatter(FuncFormatter(pd_timedelta_formatter))
ax.yaxis.set_major_locator(MultipleLocator(tick_interval.total_seconds() * NS_PER_SEC))
ax.plot(df["date"], df["runtime"])
plt.show()