散景“源”与不同的列长度

时间:2017-02-16 23:11:27

标签: python bokeh

我试图用散景在同一个图表中绘制几个时间序列。有些系列的长度与其他系列不同,但我想让它们显示出来。

此时,我发出警告告诉我,源的所有列都没有相同的长度,但Bokeh似乎会自动调整大小。

另一个重要的事情,我需要在相同的源中包含时间序列的所有'Y'值,因为我在JS中使用回调来创建和交互式绘图。

回调是:

callback = CustomJS(args=dict(source=source), code="""
            // data contains the source.column_names keys
            var data = source.get('data');
            // f contains the name of the time series to be plotted
            var f = cb_obj.get('value');

            // For each key in the source, find the lines to be plotted
            for (i = 0; i < Object.keys(data).length; i++) {
                curr_key = Object.keys(data)[i];
                // 'line' identifier is used to recognise columns of sources which represent Y values
                if (curr_key.includes('line')) {
                    id_ = curr_key.split('_')[0];
                    associated_save = id_.concat('_save_y');
                    // If the time series is in the selected to be plotted, set the data to plot it
                    if (f.indexOf(curr_key) > -1) {
                        data[curr_key] = data[associated_save]
                    } else {   // else, fixe to nan to erase it
                        data[curr_key] = 'nan'
                    }
                }

            }

            source.trigger('change');
        """)

该算法将循环遍历源的column_names,以绘制/或取消绘制相应的时间序列。

我可以在args=dict(source=source)提供来源列表吗?我应该忽略警告,但是我的系列节目被剪掉了还是应该以其他方式处理?

情节很好,但我试图删除警告......

谢谢!

1 个答案:

答案 0 :(得分:1)

我主要看两个选项:

  • 将数据重新采样到相同的长度,但这可能不那么容易,并且很大程度上取决于数据的属性。 (如果插值或下采样是可行的等等)

  • 您可以将多个line()(或任何字形)图添加到一个图中。表示您将数据分组为多个数据帧,长度相同。然后你的Javascript需要一点点重构。您可以遍历作为行的渲染器,并且您可以引用相应的源。或者您可以在javascript中禁用渲染器(隐藏绘图)