以列作为轴的子地块

2024-05-15 04:08:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据帧:

runtime        name   grade   
2021-05-28     Jimmy  50.34  
2021-05-28      John  51.02
2021-05-28    Sherry  51.28
2021-05-28    Angela  45.99
2021-05-28      Mary  48.64
...
2021-08-23    Nathan  46.65
2021-08-23    Angela  50.64
2021-08-23    Sherry  46.77
2021-08-23      John  48.55
2021-08-23    Albert  48.89

我想为每个唯一的df['name']创建一个带有df['grade']的子地块和一个共享的x轴:运行时

这就是我目前所拥有的

n = len(pd.unique(dfp['name']))

fig, axs = plt.subplots(nrows=n, figsize=(7, 5), sharex=True)
for ax, column, label in zip(axs,['grade'],['name']):
    dfp.plot(x='runtime', xlabel="Date", y=column, ylabel=label, kind='line', marker='o',linewidth=2,legend=False, ax=ax)

这将创建一个带有n图的地物,但它会绘制顶行上的所有点


Tags: 数据namedfcolumnaxjohnlabelruntime
1条回答
网友
1楼 · 发布于 2024-05-15 04:08:51

如果您有这样一个数据帧:

names = ['Jimmy', 'John', 'Sherry', 'Angela', 'Mary', 'Nathan', 'Albert']
dates = pd.date_range(start = '2021-05-28', end = '2021-08-23', freq = 'D')

df = pd.DataFrame({'runtime': np.repeat(dates, len(names))})
df['name'] = len(dates)*names
df['grade'] = 40 + 20*np.random.random(len(df))
       runtime    name      grade
0   2021-05-28   Jimmy  59.566912
1   2021-05-28    John  40.665274
2   2021-05-28  Sherry  46.436037
3   2021-05-28  Angela  57.563779
4   2021-05-28    Mary  51.033777
..         ...     ...        ...
611 2021-08-23  Sherry  41.600039
612 2021-08-23  Angela  52.228123
613 2021-08-23    Mary  47.629508
614 2021-08-23  Nathan  54.016968
615 2021-08-23  Albert  52.710416

您可以将此用于循环:

for i, name in enumerate(df['name'].unique(), 0):
    df_filtered = df[df['name'] == name]
    ax[i].plot(df_filtered['runtime'], df_filtered['grade'], marker='o',linewidth=2)
    ax[i].set_ylabel(name)

enter image description here

相关问题 更多 >

    热门问题