我正在尝试创建带有错误栏的条形图。我查看了以下answer来生成此类视图。我的代码有效,直到p.line(y_err_x, y_err_y, color="black" )
大概由于x
轴索引而导致我收到以下错误:Unable to get property 'A' of undefined or null reference
适当的用途是什么?提前谢谢!
from bokeh.io import show, output_notebook
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.transform import factor_cmap
output_notebook()
groups= ['A', 'B', 'C', 'D']
counts = [5, 3, 4, 2]
yerr = [1,2,3,4]
source = ColumnDataSource(data=dict(groups=groups, counts=counts))
p = figure(x_range=groups, plot_height=350, toolbar_location=None, title="Values")
p.vbar(x='groups', top='counts', width=0.9, source=source, legend="groups",
line_color='white', fill_color=factor_cmap('groups', palette=["#962980","#295f96","#29966c","#968529"],
factors=groups))
y_err_x = []
y_err_y = []
for px, py, err in zip(groups, counts, yerr):
y_err_x.append((px, px))
y_err_y.append((py - err, py + err))
p.line(y_err_x, y_err_y, color="black" )
p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
show(p)
答案 0 :(得分:1)
不再需要该答案的技巧。错误注释现已内置到Bokeh中,请参阅文档:
https://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#whiskers
和
https://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#bands
这是一个完整的例子:
from bokeh.io import show, output_file
from bokeh.models import ColumnDataSource, Whisker
from bokeh.plotting import figure
from bokeh.transform import factor_cmap
output_file("error.html")
groups= ['A', 'B', 'C', 'D']
counts = [5, 3, 4, 2]
error = [0.8, 0.4, 0.4, 0.3]
upper = [x+e for x,e in zip(counts, error) ]
lower = [x-e for x,e in zip(counts, error) ]
source = ColumnDataSource(data=dict(groups=groups, counts=counts, upper=upper, lower=lower))
p = figure(x_range=groups, plot_height=350, toolbar_location=None, title="Values", y_range=(0,7))
p.vbar(x='groups', top='counts', width=0.9, source=source, legend="groups",
line_color='white', fill_color=factor_cmap('groups', palette=["#962980","#295f96","#29966c","#968529"],
factors=groups))
p.add_layout(
Whisker(source=source, base="groups", upper="upper", lower="lower", level="overlay")
)
p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
show(p)