79620800

Date: 2025-05-14 06:01:40
Score: 0.5
Natty:
Report link

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()

result

Reasons:
  • Probably link only (1):
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Low reputation (0.5):
Posted by: HTE