Я пытаюсь использовать bokeh
и holoviews
для создания интерактивной сетевой визуализации. Тем не менее, я не могу понять, как передать атрибуты узла в граф Holoviews, чтобы затем цвет по значениям атрибута. Мой networkx
график имеет множество различных атрибутов узлов, и в конечном итоге мне бы хотелось иметь выпадающее меню, в котором можно выбрать атрибут для цвета, а также атрибуты, отображаемые во всплывающей подсказке. Однако на данный момент я просто хочу иметь возможность окрашивать любые атрибуты узла.
Я следовал за всеми примерами боке и всеми примерами holoviews , которые я могу найти, но я не могу понять это. Пример Facebook выглядит многообещающе, но я не могу поверить, что мне нужно было бы взять мои данные из networkx
в pandas
, чтобы сделать это.
Как я могу настроить свой код ниже, чтобы раскрасить узлы по их атрибутам узла NetworkX?
import networkx as nx
import holoviews as hv
hv.extension('bokeh')
%opts Graph [width=400 height=400]
# create an example graph
g = nx.karate_club_graph()
# look at node attributes
g.nodes[0]
{'club': 'Mr. Hi'}
# load network into holoviews
graph = hv.Graph.from_networkx(g, nx.spring_layout)
# define color palette
colors = ['#000000']+hv.Cycle('Category20').values
# set plotting options
plot_opts = dict(color_index='club',
xaxis=None,
yaxis=None,
show_frame=False)
# set stple options
style_opts = dict(node_size=15,
cmap=colors,
edge_line_width=2,
edge_alpha=0.3)
# apply options to plot
padding = {'x': (-1.2, 1.2), 'y': (-1.2, 1.2)}
graph = graph.redim.range(**padding).opts(style=style_opts, plot=plot_opts)
# show plot
graph