Форматирование timedelta по оси X в HMS, если только 1 день - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть метки оси X timedelta64 [ns], которые выглядят так:

0 days 12:01:13.165040

Как мне получить следующий формат, если есть только 1 день?:

12:01:13

Если есть более одного дня, мне нужен следующий формат:

2018.11.27

Я успешно изменил метки, создав функцию и затем вызвав ее с помощью:

ax.xaxis.set_major_formatter(plt.FuncFormatter(xaxisFormat))

Но я не знаю, как именно их отформатировать.

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете установить соответствующий форматер в зависимости от границ графика.Это может выглядеть следующим образом.

import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, HourLocator, DayLocator


def plot_something(h, ax=None):
    td = np.arange(0,h, np.timedelta64(1, "h"))
    y = np.sin(np.linspace(0,h,len(td)))
    t = np.datetime64("2018-11-27") + td
    (ax or plt.gca()).plot(t, y)

fig, axes = plt.subplots(nrows=4)

plot_something(16, ax=axes[0])
plot_something(24, ax=axes[1])
plot_something(40, ax=axes[2])
plot_something(72, ax=axes[3])

def ticking(ax):
    d = np.diff(ax.get_xlim())
    if  d <= 1:
        ax.xaxis.set_major_formatter(DateFormatter("%H:%M:%S"))
    elif d <= 2:
        ax.xaxis.set_major_locator(HourLocator(byhour=(0,6,12,18)))
        ax.xaxis.set_major_formatter(DateFormatter("%H:%M:%S"))
    else:
        ax.xaxis.set_major_locator(DayLocator())
        ax.xaxis.set_major_formatter(DateFormatter("%Y.%m.%d"))

for ax in axes.flat:
    ticking(ax)

fig.tight_layout()
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...