尽管matplotlib原则上可以处理日期时间对象,但条形图无法直接解释它们。因此,您可以在timedelta上添加任意日期,然后使用转换为数字
matplotlib.dates.date2num()。然后使用
DateFormatter启用漂亮的ticklabels。
import numpy as npimport datetimeimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesdays = [2, 3, 4, 5, 8, 9, 10, 11, 12, 15, 16]time_list = [datetime.timedelta(0, 23820), datetime.timedelta(0, 27480), datetime.timedelta(0, 28500), datetime.timedelta(0, 24180), datetime.timedelta(0, 27540), datetime.timedelta(0, 28920), datetime.timedelta(0, 28800), datetime.timedelta(0, 29100), datetime.timedelta(0, 29100), datetime.timedelta(0, 24480), datetime.timedelta(0, 27000)]# specify a date to use for the timeszero = datetime.datetime(2018,1,1)time = [zero + t for t in time_list]# convert datetimes to numberszero = mdates.date2num(zero)time = [t-zero for t in mdates.date2num(time)]f = plt.figure()ax = f.add_subplot(1,1,1)ax.bar(days, time, bottom=zero)ax.yaxis_date()ax.yaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))# add 10% margin on top (since ax.margins seems to not work here)ylim = ax.get_ylim()ax.set_ylim(None, ylim[1]+0.1*np.diff(ylim))plt.show()


