如何将分类图例添加到networkx散景图

时间:2018-11-13 02:40:26

标签: python data-visualization networkx bokeh

我有以下代码可以从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的控制台错误。

enter image description here

0 个答案:

没有答案