【问题标题】:Using seaborn lineplot with grouping variable使用带有分组变量的 seaborn 线图
【发布时间】:2019-11-22 12:51:06
【问题描述】:

我有一个看起来像这样的 pandas DataFrame。

      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 创建一个grouped lineplot,它有两条线,一条基于第 1 组,另一条基于第 2 组。x 值应该是行索引(0,1,2,3, 4)并且y值应该是基于我的DataFrame每一行的平均值+置信区间。

我的问题是我的数据格式与 seaborn 似乎需要作为输入的数据格式非常不同,而且我对 DataFrames 没有经验,所以我不知道如何正确转换它。

【问题讨论】:

  • 集团是做什么的?
  • 我想要图中的两个图。一个来自 Group=1 的数据,另一个来自 Group=2 的数据。计划是通过使用 seaborn.lineplot() 函数中的参数 hue 来做到这一点,并将其设置为我所说的“组”。

标签: python pandas dataframe seaborn confidence-interval


【解决方案1】:

我想这就是你想要的:

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)

输出:

【讨论】:

  • .astype('category') 也可以删除无关的图例条目。
  • @BrendanCox 谢谢,很高兴知道。但似乎仍然需要自定义调色板。
  • 谢谢。我最终将组重命名为 0 和 1 而不是 1 和 2 :)
  • 是的,如果组名不那么重要,这也是一个好技巧。
猜你喜欢
  • 2021-03-08
  • 2019-04-29
  • 1970-01-01
  • 2020-08-03
  • 2019-08-01
  • 2021-12-30
  • 1970-01-01
  • 2018-09-05
  • 2016-06-11
相关资源
最近更新 更多