Skip to main content
`Ctrl`+`K`

Note

Go to the end to download the full example code.

# Print Graph

Example subclass of the Graph class.

    Add node: foo
    Add node: b
    Add node: a
    Add node: r
    Remove node: b
    Remove node: a
    Remove node: r
    Nodes in G:  [('foo', {'attr_dict': None})]
    Add edge: 0-1
    Edges in G:  [(0, 1, {'attr_dict': None, 'weight': 10})]
    Remove edge: 0-1
    Add edge: 0-1
    Add edge: 1-2
    Add edge: 2-3
    Edges in G:  [(0, 1, {'attr_dict': None, 'weight': 10}), (1, 2, {'attr_dict': None, 'weight': 10}), (2, 3, {'attr_dict': None, 'weight': 10})]
    Remove edge: 0-1
    Remove edge: 1-2
    Remove edge: 2-3
    Edges in G:  []
    Add node: 0
    Add edge: 0-1
    Add edge: 1-2
    Add edge: 2-3
    Add edge: 3-4
    Add edge: 4-5
    Add edge: 5-6
    Add edge: 6-7
    Add edge: 7-8
    Add edge: 8-9
    Add node: 9
    Add edge: 9-10
    Add edge: 9-11
    Add edge: 9-12

    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(3), range(1, 4)), weight=10)
    print("Edges in G: ", G.edges(data=True))
    G.remove_edges_from(zip(range(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()

Total running time of the script: (0 minutes 0.038 seconds)

Gallery generated by Sphinx-Gallery