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

rjzwgtxy  于 2023-01-31  发布在  Python
关注(0)|答案(1)|浏览(515)

我想用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轴将。

8yparm6h

8yparm6h1#

答案

您可以使用seaborn.lineplot来实现这一点,因为seaborn默认使用95% CI,但首先您需要通过pandas.melt重新调整数据。
如果您从 Dataframe df中的数据开始(如您提供的 Dataframe ),您可以使用以下命令重新塑造它:

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()

情节

相关问题