Как обрезать полосы ошибок на графике панд? - PullRequest
0 голосов
/ 20 мая 2019

У меня есть массив средних значений и массив стандартных отклонений в кадре данных панд, который я хотел бы построить. Средние значения соответствуют времени (в секундах) и не могут быть отрицательными. Как обрезать стандартные ошибки на графике до минимума нуля?

import numpy as np
import pandas as pd

avg_timings = np.array([0.00039999, 0.00045002, 0.00114999, 0.00155001, 0.00170001,
       0.00545   , 0.00550001, 0.0046    , 0.00545   , 0.00685   ,
       0.0079    , 0.00979999, 0.0171    , 0.04305001, 0.0204    ,
       0.02276359, 0.02916633, 0.06865   , 0.06749998, 0.10619999])

std_dev_timings = array([0.0005831 , 0.00049751, 0.00079214, 0.00135927, 0.00045823,
       0.01185953, 0.0083934 , 0.00066328, 0.0007399 , 0.00079214,
       0.00083071, 0.00107694, 0.01023177, 0.11911653, 0.00874871,
       0.00299976, 0.01048584, 0.01463652, 0.00785808, 0.09579386])


time_df = pd.DataFrame({'avg_time':avg_timings, 'std_dev':std_dev_timings, 'x':np.arange(len(avg_timings))})
ax = time_df.plot(x='x', y='avg_time', yerr='std_dev', figsize=(16,8), legend=False);
ax.set_ylabel('average timings (s)')
ax.set_xlim(-1, 20)

enter image description here

Я хочу обрезать полосы ошибок в ноль (выделены красным), чтобы время никогда не могло быть отрицательным. Есть ли способ добиться этого?

1 Ответ

1 голос
/ 20 мая 2019

Попробуйте использовать plt.errorbar и введите yerr=[y_low, y_high]:

y_errors = time_df[['avg_time', 'std_dev']].min(axis=1)

fig, ax = plt.subplots(figsize=(16,8))
plt.errorbar(x=time_df['x'], 
                  y=time_df['avg_time'], 
                  yerr = [y_errors, time_df['std_dev']]
                  );
ax.set_ylabel('average timings (s)')
ax.set_xlim(-1, 20)
plt.show()

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...