可以调用matplotlib.dates.date2num,其中plt.plot是datetime.datetime对象的列表。 该图将包括xticks,格式为3006131943328187187395,并且在您放大时会自动更改为显示小时,分钟,秒的数字。
但是,听起来您想要比这更多的控制。 也许它没有以您希望的比例显示时,分,秒。
在这种情况下,您可以设置自己的日期格式化程序:
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
不幸的是,如果将matplotlib.dates.date2num对象传递给3006131943328187187,则matplotlib自动选择的xticks似乎总是具有等于零的秒数。 例如,如果您运行
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks( rotation=25 )
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(dates,values)
plt.show()
那么您会获得格式正确的日期,但是所有xtick秒均为零。
那么解决方案是什么?
如果您自己转换时间戳-> datetime.datetime对象-> matplotlib datenums,并将datenums传递给matplotlib.dates.date2num,则保留秒数。
PS。 “ matplotlib datenum”是指matplotlib.dates.date2num返回的数字类型。
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
datenums=md.date2num(dates)
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks( rotation=25 )
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(datenums,values)
plt.show()