2015-03-20 6 views

Odpowiedz

16

EDIT: To jest teraz wbudowany w Bokeh, zapoznać się z dokumentacją:

https://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#whiskers

i

https://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#bands

Zobacz https://stackoverflow.com/a/46517148/3406693 dla kompletnego przykładu.

Może trochę za późno, ale chciałem zrobić to dzisiaj.

Szkoda, że ​​bokeh nie oferuje tej funkcji samodzielnie.

import numpy as np 
from bokeh.plotting import figure, show, output_file 

# some pseudo data 
xs = np.linspace(0, 2*np.pi, 25) 
yerrs = np.random.uniform(0.1, 0.3, xs.shape) 
ys = np.sin(xs) + np.random.normal(0, yerrs, xs.shape) 

output_file('bokeh_errorbars.html') 

# plot the points 
p = figure(title='errorbars with bokeh', width=800, height=400) 

p.xaxis.axis_label = 'x' 
p.yaxis.axis_label = 'y' 


p.circle(xs, ys, color='red', size=5, line_alpha=0) 


# create the coordinates for the errorbars 
err_xs = [] 
err_ys = [] 

for x, y, yerr in zip(xs, ys, yerrs): 
    err_xs.append((x, x)) 
    err_ys.append((y - yerr, y + yerr)) 

# plot them 
p.multi_line(err_xs, err_ys, color='red') 

show(p) 

A ta jest wynikiem:

result

Jeden chcieć używać go jako funkcję jak ten:

def errorbar(fig, x, y, xerr=None, yerr=None, color='red', 
      point_kwargs={}, error_kwargs={}): 

    fig.circle(x, y, color=color, **point_kwargs) 

    if xerr: 
     x_err_x = [] 
     x_err_y = [] 
     for px, py, err in zip(x, y, xerr): 
      x_err_x.append((px - err, px + err)) 
      x_err_y.append((py, py)) 
     fig.multi_line(x_err_x, x_err_y, color=color, **error_kwargs) 

    if yerr: 
     y_err_x = [] 
     y_err_y = [] 
     for px, py, err in zip(x, y, yerr): 
      y_err_x.append((px, px)) 
      y_err_y.append((py - err, py + err)) 
     fig.multi_line(y_err_x, y_err_y, color=color, **error_kwargs)