J'utilise Matplotlib pour générer dynamiquement des diagrammes .png à partir d'une base de données. L'utilisateur peut définir en tant qu'axe x une plage donnée de datetime, et je dois prendre en compte tout cela. Alors que Matplotlib a les dates. AutoDateLocator(), je veux que le format datetime imprimé sur le graphique soit spécifique au contexte - par ex. si l'utilisateur est en train de tracer à partir de 15 heures à 17 heures, les informations de l'année/mois/jour n'ont pas besoin d'être affichées. En ce moment, je crée manuellement les objets Locator et Formatter:Matplotlib autodatelocator format de date personnalisé?
def get_ticks(start, end):
from datetime import timedelta as td
delta = end - start
if delta <= td(minutes=10):
loc = mdates.MinuteLocator()
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(minutes=30):
loc = mdates.MinuteLocator(byminute=range(0,60,5))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(hours=1):
loc = mdates.MinuteLocator(byminute=range(0,60,15))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(hours=6):
loc = mdates.HourLocator()
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(days=1):
loc = mdates.HourLocator(byhour=range(0,24,3))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(days=3):
loc = mdates.HourLocator(byhour=range(0,24,6))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(weeks=2):
loc = mdates.DayLocator()
fmt = mdates.DateFormatter('%b %d')
elif delta <= td(weeks=12):
loc = mdates.WeekdayLocator()
fmt = mdates.DateFormatter('%b %d')
elif delta <= td(weeks=52):
loc = mdates.MonthLocator()
fmt = mdates.DateFormatter('%b')
else:
loc = mdates.MonthLocator(interval=3)
fmt = mdates.DateFormatter('%b %Y')
return loc,fmt
Y a-t-il une meilleure façon de procéder?
Malheureusement, mon problème avec l'AutoDateFormatter est qu'il ne vous laissera pas personnaliser les différents niveaux. Donc, son formatage au niveau des minutes va être dans "HH: MM: SS Timezone", que cela vous plaise ou non. – jbreed
J'ai édité la réponse pour mentionner que la version de développement est meilleure à cet égard que celle publiée. –