我按照此处发布的指南使用我自己的数据集创建了一个类似于 Gapminder(动画气泡图)的可视化工具。
一切正常(尽管我必须在我自己的代码中更改指南中的滑块 JavaScript 回调代码的几行代码)。
但是,我注意到当滑块位于位置 0 或 1 时,两个值都将映射到回调引用的源对象中的相同日期。
以供参考:
- 0 映射到日期 (08/28/2019) 而 1 映射到日期 (08/29/2019)。
js_source_array_engagement
字符串对象看起来像:{0: _0, 1: _1, 2: _2, 3: _3, 4: _4, 5: _5, 6: _6, 7: _7, 8: _8, 9: _9, 10: _10, 11: _11, 12: _12, 13: _13, 14: _14, 15: _15}
。engagement_sources
是一个字典,具有以下键:'_0', '_1', '_2', '_3', '_4', '_5', '_6', '_7', '_8', '_9', '_10', '_11', '_12', '_13', '_14', '_15'
. 键映射到 ColumnDataSource 对象。- 因此,String 对象
js_source_array_engagement
将用于engagement_sources
在 JS 回调中引用 。
这是滑块的代码:
''' ############ ADD SLIDER ############ '''
code = """
var day = slider.value,
sources = %s,
new_source_data = sources[day].data;
console.log(day);
console.log(sources[day].data['days'][0]);
text = new_source_data['days'][0];
renderer_source.data = new_source_data;
text_source.data = {'days':[text]};
""" % js_source_array_engagement
callback = CustomJS(args=engagement_sources, code=code)
slider = Slider(start=days_indices[0], end=days_indices[-1], value=0, step=1, title="Day", callback=callback)
callback.args["renderer_source"] = renderer_source
callback.args["slider"] = slider
callback.args["text_source"] = text_source
layout_one = layout([[plot], [slider]])
print(engagement_sources['_0'].data['days'][0]) #prints (08/28/2019)
print(engagement_sources['_1'].data['days'][0]) #prints (08/29/2019)
plots = row(layout_one, plot_two)
当我将滑块移动到 0 或 1 时,控制台分别打印 0 和 1。
但是,它们都映射到日期 08/29/2019。我通过打印来检查值是否正确,两个打印语句分别显示 (08/28/2019) 和 (08/29/2019)。
结果,我认为回调的代码可能有问题,特别是代码如何引用源对象,但我无法弄清楚它是什么,特别是因为它正确引用了所有其他值,除非滑块是在 0。