Добавление второй оси y в BokehJS

Я пытался добавить вторую ось y к моему сюжету BokehJS, но не могу найти, как это сделать правильно. В python bokeh это работает, но в javascript это работает по-другому. Вот мининал пример, как я пытаюсь создать и использовать вторую ось:

        var plt = Bokeh.Plotting;

        // create some data and a ColumnDataSource
        var x = Bokeh.LinAlg.linspace(-0.5, 20.5, 10);
        var y = x.map(function (v) { return v * 0.5 + 3.0; });
        var source = new Bokeh.ColumnDataSource({ data: { x: x, y: y }});

        var p = plt.figure({extra_y_ranges: {"y2": new Bokeh.Range1d({start: -1.5, end: 150})} });
        p.yaxis.axis_label = 'Axis Left';
        p.add_layout(new Bokeh.LinearAxis({ y_range_name: "y2", axis_label: 'Axis Right'}), 'right');

        // add a Line glyph
        var line = new Bokeh.Line({
            x: {field: "x"},
            y: {field: "y"},
            line_color: "#F00",
            line_width: 3
        });

        p.add_glyph(line, source);

        // add a Line glyph
        var line = new Bokeh.Line({
            x: {field: "x"},
            y: {field: "y"},
            line_color: "#FF0",
            line_width: 2,
            y_range_name: "y2"
        });

        p.add_glyph(line, source);

        plt.show(p);

ось отображается, но линия по-прежнему использует координаты левой оси.

1 ответ

  1. Хитрость заключалась не в том, чтобы добавить свойство y_range_name к прямой линии, а в том, чтобы объект глифа линии, добавленной в график:

    var l = p.add_glyph(line, source);
    l.y_range_name = "y2";