我正在构建图形,并试图弄清楚如何为边缘着色。 到目前为止,我只有彩色的节点。
gr.node_renderer.data_source.add(list(self.graph.vertices.keys()), 'index')
gr.node_renderer.data_source.add(self._get_colors(), 'color')
gr.node_renderer.glyph = Circle(size=circle_size, fill_color='color')
gr.edge_renderer.data_source.data = self._get_edges()
gr.edge_renderer.glyph = MultiLine(line_color="#CCCCCC", line_alpha=0.8, line_width=5)
我通过查看示例here获得了这段代码。
我认为也许我可以将node
替换为edge
并使用类似的方法
gr.edge_renderer.data_source.add(self._get_edge_colors(), 'color')
gr.edge_renderer.glyph = MultiLine(line_color='color', line_alpha=0.8, line_width=5)
但是它不起作用,给了我一个错误
BokehUserWarning: ColumnDataSource's columns must be of the same length. Current lengths: ('color', 13), ('end', 0), ('start', 0)
"Current lengths: %s" % ", ".join(sorted(str((k, len(v))) for k, v in data.items())), BokehUserWarning))
ERROR:bokeh.core.validation.check:E-1001 (BAD_COLUMN_NAME): Glyph refers to nonexistent column name: color [renderer: GlyphRenderer(id='2d50eb47-abef-453a-8c39-2cb2a5e472ce', ...)]
不确定为什么说('end', 0), ('start', 0)
,因为_get_edges()
输出的完整字典的大小与_get_edge_colors
输出的颜色列表相同