绘制实验时间序列数据熊猫

时间:2015-04-06 00:49:28

标签: python pandas matplotlib

我是熊猫的新手。我想在熊猫中绘制标记的时间序列(每日活动)数据。水平(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

1 个答案:

答案 0 :(得分:0)

这实际上是一个matplotlib问题......

我没有试图复制你的示例情节的每个功能,但你会得到漂移。

Example image

此图片的代码如下......

# --- 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