使用seaborn的lineplot进行分组变量绘图

8
我有一个看起来像这样的pandas数据框。
      0      1      2     3      4      5     6     7     8     9  Group
0   0.0    0.0    0.0  12.5   12.5    0.0   0.0  12.5   0.0  12.5      1
1   0.0   12.5   12.5  12.5    0.0    0.0   0.0   0.0  12.5  12.5      1
2  37.5   37.5   37.5   0.0   37.5   37.5  25.0  25.0  37.5  25.0      1
3  25.0   50.0   25.0  25.0   50.0   50.0  25.0   0.0  37.5  50.0      1
4  50.0   62.5   50.0  62.5   50.0   50.0  62.5  50.0  62.5  50.0      1
0  12.5   12.5    0.0   0.0   12.5   12.5   0.0   0.0  12.5   0.0      2
1   0.0    0.0   12.5  12.5    0.0   12.5   0.0   0.0  25.0  25.0      2
2  50.0   25.0   37.5  12.5   37.5   25.0  37.5  25.0  37.5  37.5      2
3  25.0   50.0   25.0  12.5   37.5   37.5  25.0   0.0  37.5  50.0      2
4  62.5   50.0   50.0  62.5   50.0   50.0  62.5  50.0  62.5  50.0      2

现在我想用seaborn创建一个分组线图,其中有两条线,一条基于第一组,另一条基于第二组。x值应该是行索引(0,1,2,3,4),y值应该是基于数据框每一行的均值+置信区间。

我的问题是我的数据格式与seaborn所需的输入非常不同,而且我对数据框没有经验,因此我不知道如何正确转换它。


Group 是做什么的? - Quang Hoang
我想在图表中展示两个绘图,一个是Group=1的数据,另一个是Group=2的数据。计划使用 seaborn.lineplot() 函数中的参数_hue_ 并将其设置为我称之为“Group”来完成此操作。 - arcGuesser
1个回答

7
我想这就是你所需要的内容:

我认为这是你想要的:

draw_df = df.reset_index().melt(id_vars=['index', 'Group'], var_name='col')

# turn to string
draw_df['Group'] = draw_df.Group.astype(str)

# pass custom palette:
sns.lineplot(x='index', 
             y='value',
             hue='Group', 
             palette=['b','r'],
             data=draw_df)

输出:

在此输入图片描述


注:该段内容为HTML代码,无法进行翻译。

.astype('category') 也可以用来删除多余的图例条目。 - Brendan
@BrendanCox 谢谢,好知道。但似乎仍需要自定义调色板。 - Quang Hoang
1
谢谢。最终我将组的名称改为0和1,而不是1和2 :) - arcGuesser
是的,如果群组名称不那么重要,这也是一个不错的技巧。 - Quang Hoang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接