https://networkx.org/documentation/stable/reference/classes/index.html
https://networkx.org/documentation/stable/reference/classes/graph.html
G = nx.Graph() # undirected graph G = nx.Graph(edge_list) # a list of 2-tuples G = nx.Graph(other_graph) # a copy G = nx.Graph(name="My graph") # 'name' is a graph attribute G.graph["name"] = "Small graph" # changing 'name' G.graph["day"] = "Monday" print(G) # Small graph print(G.graph) # {'name': 'Small graph', 'day': 'Monday'} # G.graph is a dict with graph attributes
Graph nodes can be any hashable object e.g., a number, a text string, etc. [do not use None!]
# Adding nodes. # G.add_node(node) # G.add_node(node, key1=value1, key2=value2) # G.add_node(node, **node_attribute_dict) # but not: G.add_node(node, node_attribute_dict) # # (1) G.add_node(node) # first create, then add attributes # (2a) G.nodes[node]['key'] = value # (2b) G.nodes[node].update(node_attribute_dict) # G.nodes[node] is node_attribute_dict. # Use G.add_node() to add new nodes! # # G.add_nodes_from(iterable) # G.add_nodes_from(iterable, key=value) # the same for all nodes # iterable can yield nodes or 2-tuples (node, node_attribute_dict) # G.add_nodes_from(other_graph) G.add_nodes_from( [1, 2, 3] ) G.add_nodes_from( [ (4, {"color": "red"}), (5, {"color": "green"}) ] ) G.add_nodes_from( [6, 7], color="black" ) G.nodes # NodeView(...) list(G.nodes) # a list of nodes G.nodes.data() # NodeDataView(...) list(G.nodes.data()) # a list of 2-tuples (node, node_attribute_dict) for node in G.nodes: # iteration over nodes G.nodes[node]['size'] = None
# Using attributes. D = nx.get_node_attributes(G, "attr") # {node1: value1, node2; value2, ...} # Returns a dictionary of attributes keyed by node. # Nodes without this attribute are not included in the returned dict. #D = nx.get_node_attributes(G, "color", default="white") # networkx version 3 # Default value of the node attribute if there is no value set # for that node in graph. nx.set_node_attributes(G, {node1: value1, node2; value2, ...}, "attr") # A dictionary of dictionaries can be used as the second argument. nx.set_node_attributes(G, {node1: {"attr1": value1}, node2: {"attr2": value2}, ...})
# Adding edges. # G.add_edge(node1, node2) # G.add_edge(node1, node2, key1=value1, key2=value2) # Note that key1 and key2 are like Python names here (not numbers!). # G.add_edge(node1, node2, **edge_attribute_dict) # but not: G.add_edge(node1, node2, edge_attribute_dict) # # (1) G.add_edge(node1, node2) # first create, then add attributes # (2a) G[node1][node2]['key'] = value # (2b) G[node1][node2].update(edge_attribute_dict) # (2c) G.edges[node1,node2]['key'] = value # (2d) G.edges[node1,node2].update(edge_attribute_dict) # Note that we can use numbers here as keys. # G[node1][node2] and G.edges[node1,node2] are edge_attribute_dict. # Use G.add_edge() to add new edges! # # G.add_edges_from(iterable) # G.add_edges_from(iterable, key=value) # the same for all edges # iterable can yield 2-tuples (node1, node2) # or 3-tuples (node1, node2, edge_attribute_dict) # G.add_weighted_edges_from(iterable) # iterable can yield 3-tuples (node1, node2, weight) G.add_edge(1, 2) G.add_edges_from( [ (7, 8) ] ) G.add_edges_from( [ (2, 3, {'weight': 3.1415}) ] ) G.add_weighted_edges_from( [ (4, 5, 0.5), (5, 6, 1.2)] ) G.edges # EdgeView(...) list(G.edges) # a list of 2-tuples (node1, node2) G.edges.data() # EdgeDataView(...) list(G.edges.data()) # a list of 3-tuples (node1, node2, edge_attribute_dict) for (source, target) in G.edges: # iteration over edges G[source][target]['length'] = None #G.edges[source,target]['length'] = None for edge in G.edges: # edge is 2-tuple G.edges[edge]['color'] = 'black'
# Using attributes. D = nx.get_edge_attributes(G, "attr") # {(node1, node2): value1, ...} # Returns a dictionary of attributes keyed by edge (2-tuple). #D = nx.get_edge_attributes(G, "color", default="white") # networkx version 3 nx.set_edge_attributes(G, {edge1: value1, edge2; value2, ...}, "attr") nx.set_edge_attributes(G, {edge1: {"attr1": value1}, edge2: {"attr": value2}, ...})
G[source] # AtlasView(...) list(G[source]) # a list of neighbors for source for target in G[source]: # read-only print("edge from {} to {}".format(source, target))
G.remove_node(node) G.remove_nodes_from(iterable) G.remove_edge(node1, node2) G.remove_edges_from(iterable) G.clear() # removing all nodes and edges
Create an undirected graph G. Color nodes from G using a greedy algorithm.
https://networkx.org/documentation/stable/reference/algorithms/coloring.html
def trivial_node_coloring(graph): """Trivial node coloring.""" counter = 0 for node in graph.nodes: graph.nodes[node]['color'] = counter counter += 1
Create an undirected graph G. Color edges from G using a greedy algorithm.
def trivial_edge_coloring(graph): """Trivial edge coloring.""" counter = 0 for edge in graph.edges: graph.edges[edge]['color'] = counter counter += 1