多个组的Python散点图,其中x轴为列,y轴为值

时间:2020-07-15 19:32:18

标签: python pandas matplotlib seaborn

我有一个包含6列的数据框-id,jan_data,feb_data,mar_data,apr_data,group。 对于样本数据,我给了2个组,我想创建2个不同的散点图-每个组一个(组可以更多)。标签应读为“第1组”,“第2组”。

X轴应包含列名称jan_data,feb_data,mar_data,apr_data,标签为“ months”,y轴应命名为“ value”(垂直书写)。现在必须绘制每个id的散点图(x轴上对应月份的数据)。

import pandas as pd
df_plot = pd.DataFrame({'id': [101,102,103,104,105,106],
                         'jan_data': [30,0,5000,5500,8900,80],
                         'feb_data': [40,0,6000,6780,7800,90],
                         'mar_data': [50,20,7000,4300,6700,78],
                         'apr_data': [60,30,8000,1200,0,67],
                         'group': [2,2,1,1,1,2]})
    id  jan_data    feb_data    mar_data    apr_data    group
0   101 30          40          50          60          2
1   102 0           0           20          30          2
2   103 5000        6000        7000        8000        1
3   104 5500        6780        4300        1200        1
4   105 8900        7800        6700        0           1
5   106 80          90          78          67          2

有人可以帮我这个忙吗?以下是一组-组1的示例图片。

Sample plot for group 1

1 个答案:

答案 0 :(得分:3)

首先melt您的DataFrame,以便为X值提供一列,为Y值提供一列。然后使用groupby为每个组创建一个不同的图。我们可以指定id将用于颜色。 (如果您希望绘图中的ID> 20,请使用其他cmap)。 DataFrame.plot.scatter会强制使用颜色条,因此只需使用plt.scatter

import matplotlib.pyplot as plt

data = df_plot.melt(id_vars=['id', 'group'])

for idx, gp in data.groupby('group'):
    fig, ax = plt.subplots(figsize=(4,4))
    ax.scatter(x=gp['variable'], y=gp['value'],
               c=gp['id'], cmap='tab20')
    
    ax.grid()
    ax.set_ylabel('Value', fontsize=12)
    ax.set_xlabel('Months', fontsize=12)
    ax.set_title(f'Group: {idx}', fontsize=14)
    
    plt.show()

enter image description here enter image description here