controlling the x ticks date values

前端 未结 2 1132
故里飘歌
故里飘歌 2021-01-11 16:27

I have the following data sample as x,y pairs and both x and y are Unix time-stamps:

1354648326,1354648326
1354649456,1371775551
1354649664,1429649819
135464         


        
2条回答
  •  鱼传尺愫
    2021-01-11 16:58

    Limits of your x-axis data is only from 2012-12-05 06:12:06 to 2012-12-05 08:22:19. You have to expand date range.

    However you may use this code to set x-axis ticks every 3 month:

    import matplotlib.pyplot as plt
    from itertools import izip
    import datetime
    import numpy as np
    import pandas as pd
    
    def grouped(iterable, n):
        return izip(*[iter(iterable)]*n)
    
    def getLabels(s,t):
        labels =[]
        for x in pd.date_range(start=s, end=t, freq='3M'):
            labels.append(x.strftime("%Y-%m-%d"))
        print labels
        return labels
    
    arr = [1354648326,1354648326,
    1354649456,1371775551,
    ...
    1354655889,1426675579,
    1354656139,1420486774]
    
    # convert timestamps to datetime objects
    X = list()
    Y = list()
    for x, y in grouped(arr, 2):
        X.append(datetime.datetime.fromtimestamp(x))
        Y.append(datetime.datetime.fromtimestamp(y))
    
    # range of X list is only one day: 2012-12-05
    # you have to enlarge data of X
    print np.min(X),np.max(X)
    
    # sample data
    data = np.random.uniform(-10, 10, size=len(X)*len(Y))
    
    # plot
    plt.scatter(X, Y, s = data)
    ax = plt.gca()
    # set limits for X-axis
    ax.set_xlim([np.min(X),np.max(X)])
    # generate labels
    xlabels = getLabels(np.min(X),np.max(X))
    # set ticks and labels
    ax.set_xticks(xlabels)
    ax.set_xticklabels(xlabels,rotation=20)
    
    plt.show()
    

    If I expand x-axis limits I get something like this on your data:

    ...
    # plot
    plt.scatter(X, Y, s = data)
    ax = plt.gca()
    # set limits for X-axis
    xmin = datetime.datetime(2012,1,1,0,0,0) # np.min(X)
    xmax = xmin + datetime.timedelta(days = 360) # np.max(X)
    ax.set_xlim([xmin, xmax])
    # generate labels every 3 month
    xlabels = getLabels(xmin, xmax)
    # set ticks and labels
    ax.set_xticks(xlabels)
    ax.set_xticklabels(xlabels,rotation=20)
    plt.show()
    

    If you want more complicated datetime tick labels read this answer.

提交回复
热议问题