Creating graph with date and time in axis labels with matplotlib

前端 未结 1 1159
予麋鹿
予麋鹿 2020-11-27 14:03

I have my data in an array of the following structure,

[[1293606162197, 0, 0],
 [1293605477994, 63, 0],
 [1293605478057, 0, 0],
 [1293605478072, 2735, 1249],         


        
1条回答
  •  有刺的猬
    2020-11-27 14:42

    I hope this helps. I've always had a hard time with matplotlib's dates. Matplotlib requires a float format which is days since epoch. The helper functions num2date and date2num along with python builtin datetime can be used to convert to/from. The formatting business was lifted from this example. You can change an axis on any plot to a date axis using set_major_formatter.

    import numpy as np
    from matplotlib import pyplot as plt
    from matplotlib import dates
    import datetime
    
    a = np.array([
        [1293605162197, 0, 0],
        [1293605477994, 63, 0],
        [1293605478057, 0, 0],
        [1293605478072, 2735, 1249],
        [1293606162213, 0, 0],
        [1293606162229, 0, 0]])
    
    d = a[:,0]
    y1 = a[:,1]
    y2 = a[:,2]
    
    # convert epoch to matplotlib float format
    s = d/1000
    ms = d-1000*s  # not needed?
    dts = map(datetime.datetime.fromtimestamp, s)
    fds = dates.date2num(dts) # converted
    
    # matplotlib date format object
    hfmt = dates.DateFormatter('%m/%d %H:%M')
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.vlines(fds, y2, y1)
    
    ax.xaxis.set_major_locator(dates.MinuteLocator())
    ax.xaxis.set_major_formatter(hfmt)
    ax.set_ylim(bottom = 0)
    plt.xticks(rotation='vertical')
    plt.subplots_adjust(bottom=.3)
    plt.show()
    

    result

    0 讨论(0)
提交回复
热议问题