Как добавить категорическую легенду к сюжету сети Bokeh - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующий код для построения графика боке из 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

...