如何绘制带有误差线的多条线
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
,则每个点的柱将从 min
到 max
。使用 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
我有一个数据框
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
,则每个点的柱将从min
到max
。使用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