我试图用散景在同一个图表中绘制几个时间序列。有些系列的长度与其他系列不同,但我想让它们显示出来。
此时,我发出警告告诉我,源的所有列都没有相同的长度,但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)
提供来源列表吗?我应该忽略警告,但是我的系列节目被剪掉了还是应该以其他方式处理?
情节很好,但我试图删除警告......
谢谢!
答案 0 :(得分:1)
我主要看两个选项:
将数据重新采样到相同的长度,但这可能不那么容易,并且很大程度上取决于数据的属性。 (如果插值或下采样是可行的等等)
您可以将多个line()(或任何字形)图添加到一个图中。表示您将数据分组为多个数据帧,长度相同。然后你的Javascript需要一点点重构。您可以遍历作为行的渲染器,并且您可以引用相应的源。或者您可以在javascript中禁用渲染器(隐藏绘图)