我有一个timedelta64 [ns]的x轴标签,显示为:
0 days 12:01:13.165040
如果只有1天,如何实现以下格式?
12:01:13
如果一天以上,则需要以下格式:
2018.11.27
我成功制作了一个函数,然后使用以下命令对其进行了修改:
ax.xaxis.set_major_formatter(plt.FuncFormatter(xaxisFormat))
但是我不知道如何格式化它们。
答案 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()