2015-10-24 2 views
0

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

Я могу создать список дат следующим образом:

import matplotlib.pyplot as plt 
import datetime 

dates = [datetime.date(2015,01,05), 
      datetime.date(2015,01,18), 
      datetime.date(2015,01,25), 
      datetime.date(2015,02,18), 
      datetime.date(2015,03,07), 
      datetime.date(2015,03,27),] 

Если я запускаю сценарий, я хотел бы увидеть что-то вроде:

enter image description here

Что я построенной здесь вручную ,

Я знаю, что можно будет использовать цикл, чтобы просмотреть список дат и вручную суммировать даты, используя инструкции if, если даты месяцев соответствуют и т. Д. Но я надеюсь, что есть еще несколько автоматических методов в python/Matplotlib.

+0

В целом, лучше всего также включить в нашу ссылку не очень хороший код. Вопросы без кода вообще часто накапливают близкие голоса. – cel

+0

Привет @cel. Я понимаю, что вы сказали, но, к сожалению, мне действительно нечего было работать, но я не мог дать MWE. Я был уверен, что в принятом ответе будет какой-то подход, который не потребует примера. – Jonny

ответ

2

Вы можете использовать панд для этого:

import pandas as pd 
import datetime 

dates = [datetime.date(2015,01,05), 
      datetime.date(2015,01,18), 
      datetime.date(2015,01,25), 
      datetime.date(2015,02,18), 
      datetime.date(2015,03,07), 
      datetime.date(2015,03,27),] 

df = pd.DataFrame({'dates':dates}) 
df.dates = pd.to_datetime(df.dates) 

df.groupby(df.dates.dt.month).count().plot(kind='bar') 

Дает:

enter image description here

The df.dates.dt.month получает в месяц для каждого. Таким же образом вы можете группировать по дням, годам и т. Д.