Matplotlib: xticks every 15 minutes, starting from an hour

I am trying to plot temperature values ​​over time with time formatted as HH: MM. I can set the xticks to repeat every 15 minutes, but the first tick for the first time (e.g. 04:40).

Is there a way to switch ticks for an hour and for the next quarter of an hour (04:45, 05:00, 05:15, etc.)? My current code is as follows:

import matplotlib.pyplot as plt import matplotlib.dates as md import datetime as dt ## Dummy times and temperatures time = [dt.datetime(2017,2,15,4,40),dt.datetime(2017,2,15,4,46),dt.datetime(2017,2,15,4,52),dt.datetime(2017,2,15,4,58),dt.datetime(2017,2,15,5,4),dt.datetime(2017,2,15,5,10)] temp = [7, 8, 9, 10, 11, 12] ## Plot the data figtemp, ax = plt.subplots(1, 1) ax.plot(time, temp) ## Set time format and the interval of ticks (every 15 minutes) xformatter = md.DateFormatter('%H:%M') xlocator = md.MinuteLocator(interval = 15) ## Set xtick labels to appear every 15 minutes ax.xaxis.set_major_locator(xlocator) ## Format xtick labels as HH:MM plt.gcf().axes[0].xaxis.set_major_formatter(xformatter) 
+5
source share
2 answers

You can tell the MinuteLocator use only 0,15,30,45 minutes with the byminute argument.

 xlocator = md.MinuteLocator(byminute=[0,15,30,45], interval = 1) 
+6
source

Use Axes.set_xticklabels ,

 labels = ['04:45', '05:00', '05:15'] plt.gca().set_xticklabels(labels) 

which produces

enter image description here


Switching time to parallel quarter hour,

 import datetime list_dt = [ datetime.datetime(2017,2,15,4,40), datetime.datetime(2017,2,15,4,46), datetime.datetime(2017,2,15,4,52), datetime.datetime(2017,2,15,4,58), datetime.datetime(2017,2,15,5,4), datetime.datetime(2017,2,15,5,10)] adjust_list_dt = list() for dt in list_dt: print(dt.minute//15) if dt.minute % 15 == 0: adjust_minutes = dt.minute else: adjust_minutes = (dt.minute//15 + 1)*15 if adjust_minutes == 60: adjust_list_dt.append(dt.replace(hour=dt.hour+1, minute=0)) else: adjust_list_dt.append(dt.replace(minute=adjust_minutes)) print(adjust_list_dt) # Output ''' [datetime.datetime(2017, 2, 15, 4, 45), datetime.datetime(2017, 2, 15, 5, 0), datetime.datetime(2017, 2, 15, 5, 0), datetime.datetime(2017, 2, 15, 5, 0), datetime.datetime(2017, 2, 15, 5, 15), datetime.datetime(2017, 2, 15, 5, 15)] ''' 
-1
source

Source: https://habr.com/ru/post/1264582/


All Articles