3

我正在尝试使用bokehholoviews创建交互式网络可视化。但是,我无法弄清楚如何将节点属性传递到 Holoviews 图中,然后按属性值着色。我的networkx图表有一堆不同的节点属性,最终我希望有一个下拉菜单,允许我选择要着色的属性,以及显示在悬停工具提示中的属性。但是,就目前而言,我只想能够通过任何节点属性进行着色。

我一直在关注我能找到的所有散景示例和所有全息视图示例,但我似乎无法弄清楚。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

图形

4

0 回答 0