панель ошибок не ведет себя на графике loglog

у меня есть эти массивы

temperature = np.array([28.999795, 30.999707, 32.999471, 34.999571, 36.999753, 50.99875, 51.998767, 52.998236, 53.99675])
rate = np.array([ 8.08506648, 10.44422144, 13.77091141, 18.19601143, 24.96162138, 2538.75705877, 3517.08335312, 4981.46389811, 6818.2314983 ])
yerr = np.array([[5.12265926, 6.35525683, 8.63172001, 12.3078776, 17.48173449, 1155.0608696, 1599.30388408, 2220.70562796, 3069.64971509],[1.27615421e+01, 1.71655550e+01, 2.19724055e+01, 2.69018947e+01, 3.56424659e+01, 5.58085454e+03, 7.73609470e+03, 1.11787335e+04, 1.51522014e+04]])

Когда я рисую ошибки в виде отдельных точек, их расстояния до средней точки равны ожидаемым.

plt.plot(temperature, rate, marker='o', ls='none', fillstyle='none', color='r')
plt.plot(temperature, yerr[0], marker='*', ls='none', fillstyle='none', color='b' )
plt.plot(temperature, yerr[1], marker='*', ls='none', fillstyle='none', color='g' )
plt.xscale('log')
plt.yscale('log')
plt.show()

введите здесь описание изображения

Однако, когда я использую панель ошибок встроенной функции, я не получаю ожидаемого поведения.

plt.plot(temperature, rate, marker='o', ls='none', fillstyle='none', color='r')
plt.plot(temperature, yerr[0], marker='*', ls='none', fillstyle='none', color='b' )
plt.plot(temperature, yerr[1], marker='*', ls='none', fillstyle='none', color='g' )
plt.errorbar(temperature, rate, yerr=yerr, marker='o', ls='none', fillstyle='none', color='r' )
plt.xscale('log')
plt.yscale('log')
plt.show()

введите здесь описание изображения

Кто-нибудь знает, в чем проблема?


person dani reta    schedule 20.06.2019    source источник


Ответы (1)


Вы делаете фундаментальную ошибку. На первом графике у вас есть абсолютные нижняя и верхняя границы, а не планки погрешностей. Столбики погрешностей будут представлять собой разницу между этими нижними/верхними границами и фактическим rate. На втором графике, когда вы используете plt.errorbar(...), планки погрешностей всегда определяются относительно центрального значения y (в вашем случае rate).

Таким образом, при использовании аргумента yerr=yerr фактические нижние планки ошибок (yerr[0]) теперь будут равны rate - yerr[0], а фактические верхние планки ошибок будут равны yerr[1] - rate.

plt.plot(temperature, rate, marker='o', ls='none', fillstyle='none', color='r')
plt.plot(temperature, yerr[0], marker='*', ls='none', fillstyle='none', color='b' )
plt.plot(temperature, yerr[1], marker='*', ls='none', fillstyle='none', color='g' )

yerr[0] = rate - yerr[0] # Compute the actual error bar now
yerr[1] = yerr[1] - rate # Compute the actual error bar now
plt.errorbar(temperature, rate, yerr=yerr, marker='o', ls='none', fillstyle='none', color='r' )
plt.xscale('log')
plt.yscale('log')
plt.show()

введите здесь описание изображения

person Sheldore    schedule 20.06.2019
comment
Истинный! Большое спасибо! - person dani reta; 20.06.2019