对分组依据进行子图绘制,然后对分组依据进行图绘制

时间:2018-09-18 03:28:34

标签: python pandas matplotlib

嗨,我正在尝试绘制描述的分类数据:

data_df = pd.DataFrame({'Date': ['2018-09-14 00:00:22',
                                '2018-09-14 00:01:46',
                                '2018-09-14 00:01:56',
                                '2018-09-14 00:01:57',
                                '2018-09-14 00:01:58',
                                '2018-09-14 00:02:05'],
                        'userID': [33, 33, 33, 20, 20, 20],
                        'device': ['LIGHT', 'LIGHT', 'FAN', 'LIGHT', 'FAN', 'FAN'],
                        'description': ['ON', 'DIM', 'ON', 'ON', 'ON', 'OFF']})

data_df

我想通过对'设备'进行分组来绘制它们,但在此之前,我想对'userID'的行进行子图绘制,以便将它们分开按“用户ID” ,并且每个线图都根据“设备” 名称进行分组。

我也尝试按分组并绘图,但是它说我的说明不是数字,因为它是分类的。日期为x轴,描述为y轴。

1 个答案:

答案 0 :(得分:1)

您似乎可能会试图绘制descriptionuserID组中的device组。显然,description需要转换为数字变量,因此我可以自由地将ON编码为1,将DIM编码为0.5,将OFF编码为0。下面的代码应该可以解决您的问题。

data_df['Date'] = pd.to_datetime(data_df['Date'])

def desc_num(x):
    if x == 'ON':
        return 1
    elif x == 'DIM':
        return 0.5
    else:
        return 0

data_df['desc_num'] = data_df['description'].apply(desc_num)    

## Creating groups of `userID` and `device`
groups = data_df.groupby(['userID', 'device'])

for g in groups:
    plt.plot(g[1]['Date'], g[1]['desc_num'])
    plt.xlabel('Time')
    plt.ylabel('description Status')
    plt.title('Time Series of userID: {0}, for device: {1}'.format(g[1]['userID'][0], g[1]['device'][0]))
    plt.show()
    plt.close()

输出(您应该为每个子组看到这样的图):

enter image description here