【问题标题】:Plotting labed time series data pandas绘制带标签的时间序列数据熊猫
【发布时间】:2015-06-10 10:04:00
【问题描述】:

我是熊猫的新手。我想在熊猫中绘制标记的时间序列(日常活动)数据。水平(x 轴)代表时间,垂直(y 轴)代表每个活动的标签。在水平面上,我想要一个时间序列表明活动发生的点。我的数据集如下所示:

    [58]:
        import pandas as pd
        from random import random
        from datetime import datetime
        rng = pd.date_range('1/1/2011', periods=5, freq='H')
        Activity = ([True,True,False,True,False])
        ts = pd.DataFrame(Activity, index=rng, columns=['activity'])
        data = ts.asfreq('45Min', method='pad')
        data
 Out[58]:
                                activity
         2011-01-01 00:00:00    True
         2011-01-01 00:45:00    True
         2011-01-01 01:30:00    True
         2011-01-01 02:15:00    False
         2011-01-01 03:00:00    True
         2011-01-01 03:45:00    True

那么剧情会是这样的: https://www.dropbox.com/s/scimfsnqrvimmoq/Untitled.png?dl=0

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    这确实是一个 matplotlib 问题...

    我并没有试图复制你的示例情节的每一个特征,但你会明白的。

    此图片的代码如下...

    # --- initial data
    import pandas as pd
    from random import random
    from datetime import datetime
    rng = pd.date_range('1/1/2011', periods=5, freq='H')
    Activity = ([True,True,False,True,False])
    ts = pd.DataFrame(Activity, index=rng, columns=['activity'])
    data = ts.asfreq('45Min', method='pad')
    
    # --- organise the data for plotting
    data['colour'] = 'green'
    data.colour = data.colour.where(~data.activity, other='red')
    data['sz'] = 100
    data.sz = data.sz.where(~data.activity, other=50)
    data['position'] = data.activity.astype(int)
    print(data)
    
    # --- plot the data
    import matplotlib.pyplot as plt
    from matplotlib.ticker import FixedLocator
    fig, ax = plt.subplots(figsize=(8,4))
    ax.scatter(data.index, data.position, s=data.sz, c=data.colour)
    
    # - the x axis
    ax.set_xlim(['2010-12-31 23:00:00','2011-01-01 04:45:00'])
    ax.spines['top'].set_color('none') 
    ax.xaxis.set_ticks_position('bottom')
    
    # - the y axis
    ax.set_ylim(-1, 2)
    ax.spines['right'].set_color('none')
    ax.yaxis.set_ticks_position('left') 
    labels = ['False', 'True']
    tick_locations = [0, 1]
    ax.yaxis.set_major_locator(FixedLocator(tick_locations))
    ax.set_yticklabels(labels, minor=False)
    # - and display
    plt.show()
    

    我这里有一个 matplotlib 备忘单:http://bit.ly/python_cs

    【讨论】:

    • 感谢您这么快回答
    • 如果您对答案感到满意,您可能想接受它。
    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多