首页 > 解决方案 > 绘制 pandas.core.series.Series

问题描述

我怎样才能画线pandas.core.series.Series

示例

Id  Week
01       36      155
         37      145
         38      207
02       36      116
         37       98
         38       99
03       36       61
         37       29
04       36      162
         37      190
         38      190
05       36       26
         37       35
         38       20
06       36       57
         37       40
         38       15
Name: num, dtype: int64

所以所有 id 都有一行,Week 是 X,num 是 Y?

我努力了:

week.plot(x='Week', y='num')
plt.show()

但它只绘制了一条线,并(01, 36) (02, 38) (04, 38) (06, 37)在底部绘制为 X。为了制作系列,我使用了以下内容:

week = df.groupby(['Id', 'Week']).num.count()

这是一个完全相同的代码:

import pandas as pd
import matplotlib.pyplot as plt
import random
i = [1, 2, 3, 4, 5, 6]
w = [36, 37, 38]
n = 1
iD = []
wEek = []
nUm = []
for o in range(250):
    iD.append(random.choice(i))
    wEek.append(random.choice(w))
    nUm.append(n)

df = pd.DataFrame({'Id': iD, 'Week': wEek, 'num': nUm})

week = df.groupby(['Id', 'Week']).num.count()
week.plot()
plt.show()

情节看起来像这样: 情节

我希望所有的Ids 都有一个单独的行,num.count()每个Week(X) 的 (Y) 值。

标签: pythonpandasmatplotlib

解决方案


如果您实际上想要在同一图中为每个 id 绘制 4 个不同的线图,其中 x 轴为周,y 轴为数值:

week.unstack(0).plot()

如果您希望每一行在不同的子图中,只需像这样添加 subplots=True arg:

week.unstack(0).plot(subplots=True)

在这里,unstack(0) 函数以给定级别 0 为最左边的索引 (Id) 旋转我们的多索引系列。


推荐阅读