горизонтальная гистограмма matplotlib со временем в часах: минутах: секундах по оси x - PullRequest
0 голосов
/ 17 июня 2019

Я хочу показать, сколько времени пользователь тратит на несколько задач в день, используя горизонтальную гистограмму.Ось 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()

Я где-то нашел это, и оно не работает.Я даже не в состоянии настроить его, чтобы работать.Пожалуйста, предложите решение.Кроме того, я также хочу показать время, проведенное после каждой горизонтальной полосы.Любые идеи для этого также заметны.

1 Ответ

0 голосов
/ 18 июня 2019

В соответствии с важностью комментария 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')
...