Как изменить цвет в графе networkx, построенном с помощью holoviews / bokeh? - PullRequest
0 голосов
/ 21 мая 2018

Как изменить цвет отдельных узлов в следующем примере?

%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 голосов
/ 24 мая 2018

Благодаря 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

0 голосов
/ 24 мая 2018

График в том виде, в каком вы его определяете в настоящее время, не определяет никаких атрибутов, но вы все равно можете раскрасить его по индексу узла.Чтобы закрасить определенный атрибут узла, вы можете использовать опцию 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')
...