Python 绘制带标签的时间序列数据

Python 绘制带标签的时间序列数据,python,pandas,matplotlib,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', perio

我是熊猫的新手。我想在熊猫中绘制带标签的时间序列(日常活动)数据。水平(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
那么这个图应该是这样的:

这确实是一个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备忘单:

感谢您如此快速地回答。如果您对答案感到满意,您可能会接受它。