Сопоставьте объекты timedelta Python с числовым интервалом

У меня есть куча timedelta объектов.

  • Я хочу визуализировать их, показывая их в виде полос на общей линейной оси времени (например, диаграммы Ганта).

  • Конечным продуктом должен быть SVG с определенной общей шириной W (то есть ось времени шириной W и прямоугольники над ней, визуализирующие временные дельты).

  • Решение должно быть максимально точным.

Как лучше всего это сделать?

До сих пор лучший способ, который я придумал, это

  1. каким-то образом извлечь абсолютное числовое значение из всех timedelta объектов (может быть, что-то вроде времени эпохи Unix)

  2. используйте первую и последнюю метку времени для определения диапазона времени

  3. создайте функцию отображения из абсолюта, интерполируя значения (что-то вроде это)

  4. сопоставить абсолютные значения с определенной шириной SVG

  5. создайте объекты SVG, используя svgwrite

После небольшого поиска в Google шаги 1 и 2 кажутся проблематичными - я даже не уверен, что timedelta имеют абсолютное числовое значение.


person Zubo    schedule 08.10.2019    source источник
comment
#1 отвечает timedelta.total_seconds. Остальная часть вопроса слишком широка.   -  person chepner    schedule 08.10.2019
comment
@chepner Это потеряет всю точность за пределами секунд, верно? Насколько я знаю, временные дельты могут иметь точность до наносекунды.   -  person Zubo    schedule 08.10.2019
comment
Микросекунды, но да, вы бы потеряли разрешение. Однако, если количество микросекунд имеет значение, вы можете просто вычислить 1000000*(t.days*86400 + t.seconds) + t.microseconds самостоятельно, чтобы получить общую продолжительность в микросекундах. (В документации также упоминается деление td / timedelta(microseconds=1) на небольшие интервалы.)   -  person chepner    schedule 08.10.2019