在python中用阴影区域绘制95%置信区间线图

时间:2020-08-07 17:13:14

标签: python pandas matplotlib seaborn

我想使用python绘制数据帧的95%置信区间。该图将是一条线图,其中x轴表示列名称/编号,y轴表示列值。我进行了很多搜索,但可以找到所需的解决方案。这是我的数据框示例。

    Ph1        Ph2        Ph3        ph4       Ph5         Ph6
 -0.152511  -0.039428   0.131173  -0.002039  0.008101 -0.002039
 -0.068273   0.152013  -0.315244   0.005247  0.014775 -0.045268
  0.425363  -0.043105   0.071670  -0.045124 -0.036135 -0.037250
 -0.019332   0.139712  -0.026001  -0.021844 -0.040854 -0.050648
  0.077907   0.341410  -0.113731  -0.065799 -0.027229 -0.077948
  0.145185   0.112060   0.093898   0.028815  -0.032327 0.004239

还附上我的图形的一个示例,在此图形中,我显示了所需图形的x轴和y轴的大小。
example plot

1 个答案:

答案 0 :(得分:0)

答案

您可以使用seaborn.lineplot进行此操作,因为seaborn默认使用95%CI,但首先您需要通过pandas.melt重塑数据。
如果您从数据框df中的数据(如您提供的数据)开始,则可以使用以下方法重塑数据:

df = pd.melt(frame = df,
             var_name = 'column',
             value_name = 'value')

输出:

   column     value
0     Ph1 -0.152511
1     Ph1 -0.068273
2     Ph1  0.425363
3     Ph1 -0.019332
4     Ph1  0.077907
5     Ph1  0.145185
6     Ph2 -0.039428
7     Ph2  0.152013
8     Ph2 -0.043105
9     Ph2  0.139712
10    Ph2  0.341410
11    Ph2  0.112060
12    Ph3  0.131173
13    Ph3 -0.315244
14    Ph3  0.071670
15    Ph3 -0.026001
16    Ph3 -0.113731
17    Ph3  0.093898
18    ph4 -0.002039
19    ph4  0.005247
20    ph4 -0.045124
21    ph4 -0.021844
22    ph4 -0.065799
23    ph4  0.028815
24    Ph5  0.008101
25    Ph5  0.014775
26    Ph5 -0.036135
27    Ph5 -0.040854
28    Ph5 -0.027229
29    Ph5 -0.032327
30    Ph6 -0.002039
31    Ph6 -0.045268
32    Ph6 -0.037250
33    Ph6 -0.050648
34    Ph6 -0.077948
35    Ph6  0.004239

然后您可以使用以下命令绘制此df

fig, ax = plt.subplots()

sns.lineplot(ax = ax,
             data = df,
             x = 'column',
             y = 'value',
             sort = False)

plt.show()

整个代码

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

df = pd.read_csv('data.csv')

df = pd.melt(frame = df,
             var_name = 'column',
             value_name = 'value')

fig, ax = plt.subplots()

sns.lineplot(ax = ax,
             data = df,
             x = 'column',
             y = 'value')

plt.show()

情节

enter image description here