0

如何更改以下示例中各个节点的颜色?

%pylab inline

import pandas as pd
import networkx as nx
import holoviews as hv

hv.extension('bokeh')
G = nx.Graph()
ndxs = [1,2,3,4]
G.add_nodes_from(ndxs)
G.add_weighted_edges_from([(1,2,0), (1,3,1), (1,4,-1),
                           (2,4,1), (2,3,-1), (3,4,10)]) 

hv.extension('bokeh')
%opts Graph [width=400 height=400]
padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))
hv.Graph.from_networkx(G, nx.layout.spring_layout).redim.range(**padding)

在此处输入图像描述

4

2 回答 2

0

感谢 Philippjfr,这是一个很好的解决方案(使用当前开发版本的 holoviews),它使用节点属性进行着色:

%pylab inline

import pandas as pd
import networkx as nx
import holoviews as hv

hv.extension('bokeh')
G = nx.Graph()
ndxs = [1,2,3,4]
G.add_nodes_from(ndxs)
G.add_weighted_edges_from([(1,2,0), (1,3,1), (1,4,-1),
                           (2,4,1), (2,3,-1), (3,4,10)]) 

attributes = {ndx: ndx%2 for ndx in ndxs}
nx.set_node_attributes(G, attributes, 'some_attribute')

%opts Graph [width=400 height=400]
padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))
hv.Graph.from_networkx(G, nx.layout.spring_layout)\
    .redim.range(**padding)\
    .options(color_index='some_attribute', cmap='Category10')

在此处输入图像描述

于 2018-05-24T13:27:06.337 回答
0

您当前定义的图形未定义任何属性,但您仍然可以按节点索引着色。要按特定节点属性着色,您可以使用该color_index选项和cmap. 这是我们如何通过“索引”着色

graph = hv.Graph.from_networkx(G, nx.layout.spring_layout)
graph.options(color_index='index', cmap='Category10').redim.range(**padding)

如果您确实在节点上定义了属性,则将于本周发布的下一版 HoloViews (1.10.5) 将能够自动提取它们,并让您使用相同的方法为这些变量着色。

如果您想在下一个版本之前手动添加节点属性,您可以传入一个数据集,其中包含定义节点索引的单个键维度和定义为值维度的任何要添加的属性,例如:

nodes = hv.Dataset([(1, 'A'), (2, 'B'), (3, 'A'), (4, 'B')], 'index', 'some_attribute')
hv.Graph.from_networkx(G, nx.layout.spring_layout, nodes=nodes).options(color_index='some_attribute', cmap='Category10')
于 2018-05-24T11:24:26.400 回答