1

我正在尝试创建多个数字来播下有关国家/地区的各种信息。最重要的是,我试图设置一组按钮来隐藏所有数字中的国家图。使用 CustomJS 回调时,我试图将具有各个国家/地区的 ColumnDataSource 作为列传递,列中具有相应的字形。ColumnDataSource 如下所示:

{'index': array([0, 1], dtype=int64), 'US': array([GlyphRenderer(id='1038', ...), GlyphRenderer(id='1157', ...) ], dtype=object), '阿拉伯联合酋长国': array([nan, nan]), '英国': array([GlyphRenderer(id='1079', ...), GlyphRenderer(id='1198' , ...)]}

然后我尝试像下面这样传递到 CustomJS:

callback = CustomJS(args={'source':source}, code="""..."""

但是,谷歌浏览器中的控制台显示以下错误。我很难理解它是否不可迭代,因为我在每一列中都有对象,或者因为列是字符串?

Uncaught (in promise) TypeError: (intermediate value)(intermediate value)(intermediate value) is not iterable

当我直接传递一个列时,它会按我的预期工作。但是,我正在尝试在许多国家/地区投放。

callback = CustomJS(args={'source':source.data['US']}, code="""..."""

非常感谢,托马斯

4

1 回答 1

1

正如评论中所指出的,我本可以通过字典。显然是真的,我通过传递 ColumnDataSource 过度思考了这个问题。

该问题已通过循环遍历所有字形解决,如下面的示例所示,该示例使所有字形不可见。

callback = CustomJS(args={'source':one_line, 'countries': all_countries}, code="""
var arr_glyphs = source;
var arr_countries = countries;
var index;
var index_country;                     

for (index = 0; index < arr_countries.length; ++index) {
    for (index_country = 0; index_country < arr_countries[index].length; ++index_country) {
        arr_glyphs[arr_countries[index]][index_country].visible = false;
    };
};""")

谢谢您的帮助!

于 2020-04-25T19:58:12.517 回答