我有以下代码可以从NetworkX制作散景图
p = figure(x_range=(-1.1, 1.1), y_range=(-1.1, 1.1))
p.grid.visible = False
p.axis.visible = False
graph_renderer = from_networkx(G, nx.spring_layout, random_state=11, center=(0, 0), scale=1, k=0.5)
color_map = factor_cmap('domain_cat', factors=factors, palette=Category10_6)
graph_renderer.node_renderer.glyph = Circle(radius=0.02, fill_color=color_map, line_color=None, fill_alpha=1)
graph_renderer.edge_renderer.glyph = MultiLine(line_color='lightgray', line_alpha=0.3, line_width=2)
p.renderers.append(graph_renderer)
p.add_tools(HoverTool(tooltips='@index', show_arrow=None))
show(p)
效果很好。但是,我为节点有一个分类颜色图。我想添加一个图例。
使用绘图界面时,只需输入源列名称(https://bokeh.pydata.org/en/latest/docs/user_guide/categorical.html#colors),即可轻松添加分类图例。
但是,即使通过模型界面,我也不知道如何使用分类图例Legend和LegendItem生成。
我尝试了以下的变体
items = [LegendItem(label=factor, renderers=[graph_renderer.node_renderer]) for factor in factors]
legend = Legend(items=items)
p.add_layout(legend)
但这会产生以下结果,带有正确高度的空白图例和读取TypeError: v is undefined; can't access its "draw_legend" property
的控制台错误。