Гистограмма в matplotlib, время по оси x
Я новичок в matplotlib (1.3.1-2), и я не могу найти достойное место для начала. Я хочу построить распределение точек во времени на гистограмме с помощью matplotlib.
В принципе, я хочу построить совокупную сумму наступления даты.
date
2011-12-13
2011-12-13
2013-11-01
2013-11-01
2013-06-04
2013-06-04
2014-01-01
...
Это сделало бы
2011-12-13 -> 2 times
2013-11-01 -> 3 times
2013-06-04 -> 2 times
2014-01-01 -> once
Поскольку на протяжении многих лет будет много точек, я хочу установить start date
своей x-Axis
и end date
, а затем отметить n-time steps
(т.е. шаги в 1 год) и, наконец, решить, сколько там будет bins
.
Как мне это достичь?
Ответы
Ответ 1
Matplotlib использует собственный формат для дат/времени, но также предоставляет простые функции для преобразования, которые предоставляются в модуле dates
. Он также предоставляет различные Locators
и Formatters
которые заботятся о размещении тиков на оси и форматировании соответствующих меток. Это должно помочь вам начать:
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# generate some random data (approximately over 5 years)
data = [float(random.randint(1271517521, 1429197513)) for _ in range(1000)]
# convert the epoch format to matplotlib date format
mpl_data = mdates.epoch2num(data)
# plot it
fig, ax = plt.subplots(1,1)
ax.hist(mpl_data, bins=50, color='lightblue')
ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%y'))
plt.show()
Результат:
Ответ 2
Чтобы добавить к запросу hitzg, вы можете использовать AutoDateLocator
и AutoDateFormatter
чтобы иметь matplotlib для вашего местоположения и форматирования:
locator = mdates.AutoDateLocator()
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(mdates.AutoDateFormatter(locator))