Как построить заштрихованные полосы ошибок с Seaborn? - PullRequest
0 голосов
/ 22 апреля 2020

I sh для создания графика, подобного следующему, где я показываю некоторые значения наряду со стандартными отклонениями.

enter image description here

У меня есть два набора значений, содержащих среднее и стандартное отклонение, полученные двумя разными методами. Я думал сделать это с seaborn , но я точно не знаю, как это сделать, поскольку в официальном примере 1011 * используются 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]

Спасибо,

G.

1 Ответ

1 голос
/ 22 апреля 2020

Вот минимальный пример создания такого графика с заданными данными. Благодаря векторизации и трансляции работа с 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()

example plot

Другой пример:

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

second example

...