散景-从CustomJS中访问轴标签会触发错误,但可以在Python代码中使用

时间:2018-12-12 05:48:33

标签: python bokeh

我有一个标准的身材

p=figure(plot_width = 1200, plot_height = 600, x_axis_label= "cities", y_axis_label="population")

我可以使用以下方式更改任一轴的标签

p.yaxis.axis_label = "something else"

尽管如果我创建一个CustomJS来更改标签,则无法使用。 当我通过CustomJSyaxis.axis_label时收到错误消息:

AttributeError: '_list_attr_splat' object has no attribute 'axis_label'

这是JS代码:

callback=CustomJS(args=dict(label=p.yaxis.axis_label), code="""

    var y_label = label;
    y_label.set("something else");

""")

如果相反,我只传递了p.yaxis,然后尝试用JS代码访问axis_label,则在网页上出现以下错误:

typeError: y_label is undefined

这是JS代码:

callback=CustomJS(args=dict(label=p.yaxis), code="""

    var y_label = label.axis_label;
    y_label.set("something else");

""")

虽然您可以清楚地看到它是在开始时实例化的。

这是Bokeh中的错误还是在这里我做错了什么?

1 个答案:

答案 0 :(得分:2)

图可能有多个y轴,因此p.yaxis实际上是包含图上所有y轴的列表:

>>> p.yaxis
[<bokeh.models.axes.LinearAxis at 0x106fa2390>]

但是,通常只有y轴。因此Bokeh的便利之处在于可以设置p.yaxis.label = "foo"而不使用下标。 This is described in the documentation但这仅适用于Python,在Javascript方面从技术上讲不可能。在那里,您将必须明确,并将p.yaxis视为列表,例如

p.yaxis[0].axis_label = "foo"

或者,您可以从Python端在p.yaxis[0]字典中传递args,这将允许您直接引用它:

callback=CustomJS(args=dict(axis=p.yaxis[0]), code="""
    axis.axis_label = "foo"
""")