- cytoscape→networkx
- 隣接行列,隣接リストをCSVで書き出して読み込む
- graphml書き出して読み込む
- (レイアウトも一緒に読み込みたいならば)cyjsで書き出していろいろ呪文を唱えて読み込む
- networkx→cytoscape
- 隣接行列,隣接リストをCSVで書き出して読み込む
- graphml書き出して読み込む
- (レイアウトも一緒に読み込みたいならば)cyjsで書き出していろいろ呪文を唱えて読み込む
呪文の一部
def from_networkx(g, layout=None, scale=DEF_SCALE): # Dictionary Object to be converted to Cytoscape.js JSON cygraph = __build_empty_graph() if layout is not None: pos = list(map(lambda position: {'x': position[0]*scale, 'y': position[1]*scale}, layout.values())) nodes = g.nodes() if isinstance(g, nx.MultiDiGraph) or isinstance(g, nx.MultiGraph): edges = g.edges(data=True, keys=True) edge_builder = __build_multi_edge else: edges = g.edges(data=True) edge_builder = __build_edge # Map network table data cygraph[DATA] = __map_table_data(g.graph.keys(), g.graph) for i, node_id in enumerate(nodes): new_node = __create_node(g.node[node_id], node_id) if layout is not None: new_node['position'] = pos[i] cygraph['elements']['nodes'].append(new_node) for edge in edges: cygraph['elements']['edges'].append(edge_builder(edge, g)) return cygraph def to_networkx(cyjs, directed=True): """ Convert Cytoscape.js-style JSON object into NetworkX object. By default, data will be handles as a directed graph. """ if directed: g = nx.MultiDiGraph() else: g = nx.MultiGraph() network_data = cyjs[DATA] if network_data is not None: for key in network_data.keys(): g.graph[key] = network_data[key] nodes = cyjs[ELEMENTS][NODES] edges = cyjs[ELEMENTS][EDGES] for node in nodes: data = node[DATA] data[POSITION] = [node[POSITION][X], node[POSITION][Y]] #set position as attribute g.add_node(data[ID], attr_dict=data) for edge in edges: data = edge[DATA] source = data[SOURCE] target = data[TARGET] g.add_edge(source, target, attr_dict=data) return g