如何绘制带有误差线的多条线

How to plot multiple lines with error bars

我有一个数据框

df =
f1.  f2.  f3.  f4.  f5.  g
1.    2.  3.   4.   1.   0 
2.    4.  6.   8.   7.   0
1.    2.  3.   6.   1.   1 
5.    4.  6.   8.   7.   1
9.    2.  7.   5.   1.   0 
8.    4.  2.   4.   5.   1

我想绘制一个带有误差带的线图,其中每一行都是另一个样本,色调由 g 列决定,值是数字,X 轴是列(f1、f2、f3、 f4, f5) 这可能吗?

  • 使用 pandas.DataFrame.melt
  • 将数据框从宽格式重塑为长格式
  • seaborn.pointplot绘制数据
    • 点图表示通过散点图点的位置对数值变量的集中趋势的估计,并使用误差条提供有关该估计的不确定性的一些指示。
      • mean 或其他指定的点绘制的点 estimator
      • 如果未指定 ci,则每个点的柱将从 minmax。使用 ci='sd' 作为条形代表标准偏差。
    • 指定 hue='g''g' 分隔数据。
    • 使用 dodge 分隔每个点的颜色以便于阅读。
import pandas as pd
import seaborn as sns

# sample data
data = {'f1.': [1.0, 2.0, 1.0, 5.0, 9.0, 8.0], 'f2.': [2.0, 4.0, 2.0, 4.0, 2.0, 4.0], 'f3.': [3.0, 6.0, 3.0, 6.0, 7.0, 2.0], 'f4.': [4.0, 8.0, 6.0, 8.0, 5.0, 4.0], 'f5.': [1.0, 7.0, 1.0, 7.0, 1.0, 5.0], 'g': [0, 0, 1, 1, 0, 1]}
df = pd.DataFrame(data)

# reshape the dataframe
dfm = df.melt(id_vars='g')

# plot
p = sns.pointplot(data=dfm, x='variable', y='value', hue='g', ci='sd', dodge=0.25)
p.set_title('Error bars are standard deviation')
p.legend(title='g', bbox_to_anchor=(1.05, 1), loc='upper left')

p = sns.pointplot(data=dfm, x='variable', y='value', hue='g', dodge=0.25)
p.set_title('Error bars are min to max')
p.legend(title='g', bbox_to_anchor=(1.05, 1), loc='upper left')

通常对于这些问题,您需要将您的数据框转换为具有 .melt():

的长结构
import pandas as pd
import seaborn as sns
df1 = df.melt(id_vars='g')
sns.lineplot(data=df1, x='variable', y='value', hue='g')
df1

Out[1]: 
    g variable  value
0   0      f1.    1.0
1   0      f1.    2.0
2   1      f1.    1.0
3   1      f1.    5.0
4   0      f1.    9.0
5   1      f1.    8.0
6   0      f2.    2.0
7   0      f2.    4.0
8   1      f2.    2.0
9   1      f2.    4.0
10  0      f2.    2.0
11  1      f2.    4.0
12  0      f3.    3.0
13  0      f3.    6.0
14  1      f3.    3.0
15  1      f3.    6.0
16  0      f3.    7.0
17  1      f3.    2.0
18  0      f4.    4.0
19  0      f4.    8.0
20  1      f4.    6.0
21  1      f4.    8.0
22  0      f4.    5.0
23  1      f4.    4.0
24  0      f5.    1.0
25  0      f5.    7.0
26  1      f5.    1.0
27  1      f5.    7.0
28  0      f5.    1.0
29  1      f5.    5.0