Я думаю, вы немного озадачены тем, как именно matplotlib обрабатывает время и даты за кулисами.
Все даты в matplotlib представлены в виде простых чисел с плавающей точкой. 1 день соответствует разнице 1,0, а даты указаны с 1900 года (если я правильно помню, в любом случае).
Таким образом, для того, чтобы отобразить только время определенной даты, вам нужно использовать % 1
.
Я собираюсь использовать очки, но вы можете легко использовать бары. Посмотрите на использование ключевого аргумента bottom
, если вы используете plt.bar
, чтобы нижняя часть баров начиналась во время начала ваших интервалов (и помните, что вторым аргументом является height из бар, а не его верхнее значение y).
Например:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import datetime as dt
# Make a series of events 1 day apart
x = mpl.dates.drange(dt.datetime(2009,10,1),
dt.datetime(2010,1,15),
dt.timedelta(days=1))
# Vary the datetimes so that they occur at random times
# Remember, 1.0 is equivalent to 1 day in this case...
x += np.random.random(x.size)
# We can extract the time by using a modulo 1, and adding an arbitrary base date
times = x % 1 + int(x[0]) # (The int is so the y-axis starts at midnight...)
# I'm just plotting points here, but you could just as easily use a bar.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot_date(x, times, 'ro')
ax.yaxis_date()
fig.autofmt_xdate()
plt.show()
Надеюсь, это немного поможет!