| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- """
- ===========
- Print Graph
- ===========
- Example subclass of the Graph class.
- """
- import matplotlib.pyplot as plt
- import networkx as nx
- from networkx import Graph
- class PrintGraph(Graph):
- """
- Example subclass of the Graph class.
- Prints activity log to file or standard output.
- """
- def __init__(self, data=None, name="", file=None, **attr):
- super().__init__(data=data, name=name, **attr)
- if file is None:
- import sys
- self.fh = sys.stdout
- else:
- self.fh = open(file, "w")
- def add_node(self, n, attr_dict=None, **attr):
- super().add_node(n, attr_dict=attr_dict, **attr)
- self.fh.write(f"Add node: {n}\n")
- def add_nodes_from(self, nodes, **attr):
- for n in nodes:
- self.add_node(n, **attr)
- def remove_node(self, n):
- super().remove_node(n)
- self.fh.write(f"Remove node: {n}\n")
- def remove_nodes_from(self, nodes):
- for n in nodes:
- self.remove_node(n)
- def add_edge(self, u, v, attr_dict=None, **attr):
- super().add_edge(u, v, attr_dict=attr_dict, **attr)
- self.fh.write(f"Add edge: {u}-{v}\n")
- def add_edges_from(self, ebunch, attr_dict=None, **attr):
- for e in ebunch:
- u, v = e[0:2]
- self.add_edge(u, v, attr_dict=attr_dict, **attr)
- def remove_edge(self, u, v):
- super().remove_edge(u, v)
- self.fh.write(f"Remove edge: {u}-{v}\n")
- def remove_edges_from(self, ebunch):
- for e in ebunch:
- u, v = e[0:2]
- self.remove_edge(u, v)
- def clear(self):
- super().clear()
- self.fh.write("Clear graph\n")
- G = PrintGraph()
- G.add_node("foo")
- G.add_nodes_from("bar", weight=8)
- G.remove_node("b")
- G.remove_nodes_from("ar")
- print("Nodes in G: ", G.nodes(data=True))
- G.add_edge(0, 1, weight=10)
- print("Edges in G: ", G.edges(data=True))
- G.remove_edge(0, 1)
- G.add_edges_from(zip(range(0, 3), range(1, 4)), weight=10)
- print("Edges in G: ", G.edges(data=True))
- G.remove_edges_from(zip(range(0, 3), range(1, 4)))
- print("Edges in G: ", G.edges(data=True))
- G = PrintGraph()
- nx.add_path(G, range(10))
- nx.add_star(G, range(9, 13))
- pos = nx.spring_layout(G, seed=225) # Seed for reproducible layout
- nx.draw(G, pos)
- plt.show()
|