How ColumnDataSource and CDSView works together with from_networkx?

Hi!

I’m trying to visualize multilayer network created with networkx - each node has “layer” attribute and I want to create separate graph for each layer. I can do it like this:

def layer_graph_to_show(G,layer):
	
	layer_nodes = [n for n,attr in G.nodes(data=True) if attr["layer"]==layer]
	layer_subgraph = G.subgraph(layer_nodes)
	layout = {n:layer_subgraph.nodes[n]["coor"] for n in layer_subgraph.nodes()}
	graph = from_networkx(layer_subgraph,layout)

	return graph

This creates graph renderer with nodes from graph G in given layer. I can create plots for all layers and show them like this: (the code is a bit simplified)

plots =[]

for layer in layers:
	layer_graph_renderer = layer_graph_to_show(G,layer)
	
	layer_graph_plot = figure(title=layer,
				  x_range=(-1,1), y_range=(-1,1),
				  tools="lasso_select,pan,wheel_zoom")
	layer_graph_plot.renderers.append(layer_graph_renderer)

	plots.append(layer_graph_plot)
	
layout = gridplot(plots, ncols=2)
curdoc().add_root(layout)

But I want to add some custom callbacks (show and hide edges, change colors to selected nodes and its neighbors in all layres, …) and I don’t know how to do it. All callback examples I found works with ColumnDataSource, but what is the ColumnDataSource in graph renderer created by from_networkx?

I have also read about CDSView and I wonder if it will be better to use it instead of creating networkx subgraphs in my example - create only one graph from whole networkx graph and than filter nodes by layers. Again, I don’t know how to use CDSView at graph renderer.

Thank you for your answers,
Katerina

Hello Katerina, interested in this topic, did you solve your problem - i.e. hiding part of graph based on filters or view maybe? Not sure about turning off visible subgraph maybe as well? Thanks

Sorry, but I still do not know how to solve this problem.

The solution I found myself is to use sub graphs of the filtered table - basically creating as many sub-graphs we need and use the visible property to turn on relevant renderers. A bit heavy when more then one dimension is needed. So I’m still investigating the CDSView option but not sure how to configure the beast!
Maybe creators of Networkx renderers can help?