如果只有1天,则将x轴上的时间增量格式化为HMS

时间:2018-11-27 16:17:26

标签: python pandas matplotlib

我有一个timedelta64 [ns]的x轴标签,显示为:

0 days 12:01:13.165040

如果只有1天,如何实现以下格式?

12:01:13

如果一天以上,则需要以下格式:

2018.11.27

我成功制作了一个函数,然后使用以下命令对其进行了修改:

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

但是我不知道如何格式化它们。

1 个答案:

答案 0 :(得分:0)

您可以根据绘图范围设置相应的格式化程序。可能如下所示。

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