如何使用holoviews / bokeh绘制网络图中的颜色?

时间:2018-05-21 20:55:04

标签: networkx bokeh 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)]) 

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)

enter image description here

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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')

enter image description here