def networkx2cytoscape(self, g): pos = nx.drawing.nx_agraph.pygraphviz_layout(g, prog='dot', args="-Grankdir=LR") g_cy = cy.network.create_from_networkx(g) view_id_list = g_cy.get_views() view1 = g_cy.get_view(view_id_list[0], format='view') # Switch current visual style to a simple one... minimal_style = cy.style.create('Minimal') cy.style.apply(style=minimal_style, network=g_cy) node_name2id = util.name2suid(g_cy, 'node') edge_name2id = util.name2suid(g_cy, 'edge') node_x_values = {node_name2id[i]: pos[i][0] for i in pos} node_y_values = {node_name2id[i]: pos[i][1] for i in pos} node_label_values = {node_name2id[i[0]]: i[1]['label'] for i in g.nodes(data=True)} node_color_values = {node_name2id[i[0]]: i[1]['background-color'] for i in g.nodes(data=True)} edge_source_arrow_head = {edge_name2id[str(i[0]) + ',' + str(i[1])]: i[2]['source-arrow-shape'] for i in g.edges(data=True)} edge_target_arrow_head = {edge_name2id[str(i[0]) + ',' + str(i[1])]: i[2]['target-arrow-shape'] for i in g.edges(data=True)} view1.update_node_views(visual_property='NODE_X_LOCATION', values=node_x_values) view1.update_node_views(visual_property='NODE_Y_LOCATION', values=node_y_values) view1.update_node_views(visual_property='NODE_LABEL', values=node_label_values) view1.update_node_views(visual_property='NODE_FILL_COLOR', values=node_color_values) view1.update_edge_views(visual_property='EDGE_SOURCE_ARROW_SHAPE', values=edge_source_arrow_head) view1.update_edge_views(visual_property='EDGE_TARGET_ARROW_SHAPE', values=edge_target_arrow_head) return
def test_name2suid(self): print('\n---------- name2suid tests start -----------\n') locations = ['http://chianti.ucsd.edu/cytoscape-data/galFiltered.sif'] network = self.client.network.create_from(locations) node_count = len(network.get_nodes()) edge_count = len(network.get_edges()) result = NetworkUtil.name2suid(network, obj_type='node') edge_result = NetworkUtil.name2suid(network, obj_type='edge') self.assertEqual(node_count, len(result)) self.assertEqual(edge_count, len(edge_result))
def test_name2suid(self): print('\n---------- name2suid tests start -----------\n') locations = [ 'http://chianti.ucsd.edu/cytoscape-data/galFiltered.sif' ] network = self.client.network.create_from(locations) node_count = len(network.get_nodes()) edge_count = len(network.get_edges()) result = NetworkUtil.name2suid(network, obj_type='node') edge_result = NetworkUtil.name2suid(network, obj_type='edge') self.assertEqual(node_count, len(result)) self.assertEqual(edge_count, len(edge_result))
def __init__(self, graph, layout="attributes-layout", style='Directed'): # name='FromMAGINE'): # force-directed # attributes-layout self.graph = graph self.cy = CyRestClient() self.cy.session.delete() self.cy.layout2 = LayoutClient() self.style = None self.edge_name2id = None self.node_name2id = None self.g_cy = None self.view1 = None for n, (i, j) in enumerate(self.graph.edges()): self.graph[i][j]['name'] = '{},{}'.format(i, j) self.g_cy = self.cy.network.create_from_networkx(self.graph) time.sleep(2) view_id_list = self.g_cy.get_views() self.view1 = self.g_cy.get_view(view_id_list[0], format='view') # Marquee Directed Simple self.style = self.cy.style.create(style) # self.style = self.cy.style.create('Marquee') options = { 'NODE_LABEL_FONT_SIZE': 24, 'EDGE_WIDTH': 2, 'EDGE_TRANSPARENCY': '150', # 'NETWORK_HEIGHT' : '2800', # 'NETWORK_WIDTH' : '2800', 'NODE_LABEL_COLOR': 'black', 'NODE_FILL_COLOR': 'red', 'NETWORK_BACKGROUND_PAINT': '#00FFFFFF', 'NODE_SIZE': 80, # 'NODE_LABEL_POSITION': 'C,C,c,0.00,-60.00', 'NETWORK_CENTER_X_LOCATION': 0.0, 'NETWORK_CENTER_Y_LOCATION': 0.0, } self.style.update_defaults(options) if layout == 'attributes-layout': self.cy.layout2.apply(name=layout, network=self.g_cy, params={'column': 'color'}) else: self.cy.layout2.apply(name=layout, network=self.g_cy) self.node_name2id = util.name2suid(self.g_cy, 'node') self.edge_name2id = util.name2suid(self.g_cy, 'edge')
def __update_views(self, visual_property, values, object_type=None, key_type='suid'): if key_type is 'name': name2suid = NetworkUtil.name2suid(self.__network) body = [] for key in values.keys(): if key_type is 'name': suid = name2suid[key] if suid is None: continue else: suid = key new_value = self.__create_new_value(suid, visual_property, values[key]) print(type(suid)) body.append(new_value) requests.put(self.__url + '/' + object_type, json=body, headers=HEADERS)
def __update_views(self, visual_property, values, object_type=None, key_type='suid'): if key_type == 'name': name2suid = NetworkUtil.name2suid(self.__network) body = [] for key in values.keys(): if key_type == 'name': try: suid = name2suid[key] except KeyError: continue else: suid = key new_value = self.__create_new_value(suid, visual_property, values[key]) body.append(new_value) res = requests.put(self.__url + '/' + object_type, json=body, headers=HEADERS) check_response(res)
def graph_connections(self): # Auromatically initialize graph if it's not initalized already if self.graph is False: self._setup_graph() g_cy = self.cy.network.create_from_networkx(self.g) self.cy.style.apply(style=self.CY_STYLE, network=g_cy) self.cy.layout.apply(network=g_cy) self.cy.layout.fit(network=g_cy) view_id_list = g_cy.get_views() view = g_cy.get_view(view_id_list[0], format="view") idmap = util.name2suid(g_cy) shape_dict = {} color_dict = {} border_dict = {} for n_id in idmap.values(): shape_dict[n_id] = "ellipse" color_dict[n_id] = "white" border_dict[n_id] = "#FF56E9" view.update_node_views(visual_property="NODE_SHAPE", values=shape_dict) view.update_node_views(visual_property="NODE_FILL_COLOR", values=color_dict) view.update_node_views(visual_property="NODE_BORDER_PAINT", values=border_dict)
def __update_views(self, visual_property, values, object_type=None, key_type='suid'): if key_type is 'name': name2suid = NetworkUtil.name2suid(self.__network) body = [] for key in values.keys(): if key_type is 'name': suid = name2suid[key] if suid is None: continue else: suid = key new_value = self.__create_new_value(suid, visual_property, values[key]) body.append(new_value) requests.put(self.__url + '/' + object_type, data=json.dumps(body), headers=HEADERS)