如何用seaborn绘制阴影误差带?

Gab*_*ele 9 python plot seaborn

我希望创建如下图,其中显示一些值和标准差。

在此输入图像描述

我有两组值,包含通过两种不同方法获得的平均值和标准差。我想过用seaborn来做这件事,但我不知道到底该怎么做,因为官方示例使用了我不熟悉的 pandas DataFrame 对象。

作为示例,请考虑以下起始代码:

import seaborn as sns

mean_1 = [10, 20, 30, 25, 32, 43]
std_1 = [2.2, 2.3, 1.2, 2.2, 1.8, 3.5]

mean_2 = [12, 22, 30, 13, 33, 39]
std_2 = [2.4, 1.3, 2.2, 1.2, 1.9, 3.5]
Run Code Online (Sandbox Code Playgroud)

谢谢你,

G。

Joh*_*anC 23

这是使用给定数据创建此类图的最小示例。由于矢量化和广播,使用 numpy 简化了代码。

import matplotlib.pyplot as plt
import numpy as np

mean_1 = np.array([10, 20, 30, 25, 32, 43])
std_1 = np.array([2.2, 2.3, 1.2, 2.2, 1.8, 3.5])

mean_2 = np.array([12, 22, 30, 13, 33, 39])
std_2 = np.array([2.4, 1.3, 2.2, 1.2, 1.9, 3.5])

x = np.arange(len(mean_1))
plt.plot(x, mean_1, 'b-', label='mean_1')
plt.fill_between(x, mean_1 - std_1, mean_1 + std_1, color='b', alpha=0.2)
plt.plot(x, mean_2, 'r-', label='mean_2')
plt.fill_between(x, mean_2 - std_2, mean_2 + std_2, color='r', alpha=0.2)
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

示例图

另一个例子:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

sns.set()
N = 100
x = np.arange(N)
mean_1 = 25 + np.random.normal(0.1, 1, N).cumsum()
std_1 = 3 + np.random.normal(0, .08, N).cumsum()

mean_2 = 15 + np.random.normal(0.2, 1, N).cumsum()
std_2 = 4 + np.random.normal(0, .1, N).cumsum()

plt.plot(x, mean_1, 'b-', label='mean_1')
plt.fill_between(x, mean_1 - std_1, mean_1 + std_1, color='b', alpha=0.2)
plt.plot(x, mean_2, 'r--', label='mean_2')
plt.fill_between(x, mean_2 - std_2, mean_2 + std_2, color='r', alpha=0.2)

plt.legend(title='title')
plt.show()
Run Code Online (Sandbox Code Playgroud)

第二个例子

PS:使用matplotlib 3.5或更高版本,可以在图例中组合线条和填充:

line_1, = plt.plot(x, mean_1, 'b-')
fill_1 = plt.fill_between(x, mean_1 - std_1, mean_1 + std_1, color='b', alpha=0.2)
line_2, = plt.plot(x, mean_2, 'r--')
fill_2 = plt.fill_between(x, mean_2 - std_2, mean_2 + std_2, color='r', alpha=0.2)
plt.margins(x=0)

plt.legend([(line_1, fill_1), (line_2, fill_2)], ['Series 1', 'Series 2'], title='title')
Run Code Online (Sandbox Code Playgroud)

结合线条并填充图例