matplotlib 水平条形图,x轴上的时间单位为小时:分钟:秒

vxf3dgd4  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(139)

我想用水平条形图显示一个用户每天花在几个任务上的时间。y轴是任务列表,x轴是花在这些任务上的时间。时间格式为%H:%M:%S。

fig, ax = plt.subplots()

# Example data
tasks = ('Reading', 'Mobile', 'Outing', 'Laptop')
y_pos = np.arange(len(tasks))
time_spent = ["01:01:34","00:05:23","00:00:09","02:34:32"]
error = np.random.rand(len(tasks))

ax.barh(y_pos, time_spent, xerr=error, align='center')
ax.set_yticks(y_pos)
ax.set_yticklabels(tasks)
ax.set_xlabel('Time spent')
ax.xaxis.set_major_locator(HourLocator())
ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S'))

plt.show()

我在某个地方发现了这个,它不起作用。我甚至无法调整它来工作。请提出解决方案。此外,我还想显示每个单杠后花费的时间。任何想法也是值得赞赏的。

vom3gejh

vom3gejh1#

根据beingernest的重要性,我以秒为单位传递时间,并使用时间字符串显示为标签,它工作了。

fig, ax = plt.subplots()

# Example data
tasks = ('Reading', 'Mobile', 'Outing', 'Laptop')
time_spent = ["01:01:34","00:05:23","00:00:09","02:34:32"]
timesec = []
for i in range(4):
    timesec.append(convertToSeconds(time_spent[i]))
y_pos = np.arange(len(tasks))
error = np.random.rand(len(tasks))

ax.barh(y_pos, timesec, xerr=error, align='center')
ax.set_yticks(y_pos)
ax.set_yticklabels(tasks)
ax.set_xlabel('Time Spent')
ax.get_xaxis().set_visible(False)

for i, v in enumerate(times):
    print(i)
    ax.text(v + 3, i, time_spent[i], color='blue')

相关问题