代码之家  ›  专栏  ›  技术社区  ›  user6083088

如何在python中绘制非连续的自定义日期格式

  •  1
  • user6083088  · 技术社区  · 6 年前

    我有一个自定义日期格式的专栏: YYYYWeekNo e、 g.201801201802。。。201851, 201852

    当我有从201752跳到201801的数据时,问题就出现了,这会创建一个图,将数据视为100个刻度的连续数据,因此图形是扭曲的

    有没有办法用非连续的方法解决这个问题 x 标签

    x = []
    year = 2017
    for i in range(104):
        j = i+1
        if j <= 52:
            x.append(year * 100 + j)
        else:
            k = j - 52
            x.append(((year+1) * 100 ) + k)
    
    
    np.random.seed(1)
    values = np.random.randint(low=0, high=5000, size=104)
    
    
    df = pd.DataFrame.from_dict({'year_week': x, 'values': values})
    df.set_index('year_week').plot(figsize=(15, 5))
    

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   Piotrek    6 年前

    可以使用“断开”轴 matplotlib example .这将是定制版:

    import matplotlib.pylab as plt
    import numpy as np
    
    x = []
    year = 2017
    for i in range(104):
        j = i+1
        if j <= 52:
            x.append(year * 100 + j)
        else:
            k = j - 52
            x.append(((year+1) * 100 ) + k)
    np.random.seed(1)
    values = np.random.randint(low=0, high=5000, size=104)
    
    df = pd.DataFrame.from_dict({'year_week': x, 'values': values})
    
    f,(ax,ax2) = plt.subplots(1,2,sharey=True, facecolor='w', figsize=(10,10))
    
    # plot the same data on both axes
    ax.plot(df['year_week'], df['values'])
    ax2.plot(df['year_week'], df['values'])
    
    ax.set_xlim(201700,201753)
    ax2.set_xlim(201800,201853)
    
    # hide the spines between ax and ax2
    ax.spines['right'].set_visible(False)
    ax2.spines['left'].set_visible(False)
    ax.yaxis.tick_left()
    ax.tick_params()
    ax2.yaxis.tick_right()
    
    #this gets rid of scientific notation, so it's more readable
    ax.ticklabel_format(useOffset=False)
    ax2.ticklabel_format(useOffset=False)
    plt.show()
    

    输出:

    enter image description here

    更重要的是,似乎有一个专门针对这个特定问题的软件包:

    Brokenaxes