NextworkX Python Overview
The Python NetworkX module contains tools for creating and manipulating, visualizing networks, also known as graphs. This is not only graph drawing package, but also collaborate with Matplotlib. By using this, we can implement highly flexible graph.
A graph is defined as a set of nodes and edges where each edge is associated with two nodes. NetworkX also adds the possibility to associate properties to each node and edge. The Networkx module is designed to handle data on a large scale relevant to modern problems. It has several classes for graphs and digraphs. It also has features to convert a graph from one to several formats.
The NetworkX can be installed using pip, Miniconda/Anaconda and from source code. Here, we have installed using pip tool -
pip install networkx
As this module is already installed in the system, that's why it returns the following -
Requirement already satisfied: networkx in c:\python37\scripts\projects\env\lib\site-packages (2.4) Requirement already satisfied: decorator>=4.3.0 in c:\python37\scripts\projects\env\lib\site-packages (from networkx) (4.4.1)
First, we import the networkx module.
import networkx as nx
Create graph object
This module provides different classes for different networks, like directed and undirected networks. Let's create a basic undirected graph object -
g = nx.Graph()
Adding or Removing Nodes
We can use add_node() method to add one graph node at a time or use add_nodes_from() method to add a list of nodes or a container of nodes.
# Add one node at a time g.add_node(1) # Add a list of nodes g.add_nodes_from([2, 3, 4]) # container of nodes cn = nx.path_graph(5) g.add_nodes_from(cn)
To remove a node from the graph, simply use remove_node() method and pass the node.
Adding and Removing Edges
The add_edge() and add_edges_from() methods are used to add single and list of edges or container of edges respectively.
# Add single edge at a time g.add_edge(1, 2) # Add a list of edges g.add_edges_from([(1,2), (1,3)])
To remove the edge from the graph, simply use remove_edge() method and pass the edge.
import matplotlib.pyplot as plt import networkx as nx g = nx.Graph() fig = plt.figure(figsize =(5, 11)) g.add_edges_from([(1, 2), (1, 3), (1,4), (2, 3), (2, 4), (2, 5), (3, 4), (4, 5), (4, 6), (5, 7), (5, 8), (7, 8)]) # original Graph created plt.subplot(211) nx.draw(g) plt.show() plt.savefig('graph.png')
The above code returns the following output -
Accessing Nodes and Edges
This module provides several methods to access the nodes and edges, number of nodes and edges and so on.
import matplotlib.pyplot as plt import networkx as nx g = nx.Graph() g.add_edges_from([(1, 2), (1, 3), (1,4), (2, 3), (2, 4), (2, 5), (3, 4), (4, 5), (4, 6), (5, 7), (5, 8), (7, 8)]) print(g.nodes()) print(g.edges()) print(g.degree(2)) print(g.number_of_nodes()) print(g.number_of_edges())
Convert to Directed Graph
The above generated graph is undirected graph, but we can also convert them to directed graph. To convert to directed graph, use to_directed() method. It returns the directed representation of graph.
import matplotlib.pyplot as plt import networkx as nx g = nx.Graph() fig = plt.figure(figsize =(5, 11)) g.add_edges_from([(1, 2), (1, 3), (1,4), (2, 3), (2, 4), (2, 5), (3, 4), (4, 5), (4, 6), (5, 7), (5, 8), (7, 8)]) # Directed Graph created plt.subplot(211) H = nx.to_directed(g) nx.draw(H) plt.show() plt.savefig('graph.png')
Similarly, we can convert a directed graph to undirected graph using to_undirected() method.
Related ArticlesHow to save figure in matplotlib pyplot
Python Line Plot Using Matplotlib
Matplotlib Pie Chart
Python Matplotlib Bar Plot
How to capture a video in Python OpenCV and save
Python OpenCV Overlaying or Blending Two Images
Contour Detection using Python OpenCV
Harris Corner Detection using Python OpenCV
Detect human body in image OpenCV
Face Recognition OpenCV Source Code
Canny Edge Detector OpenCV Python
Python NumPy: Overview and Examples
Image processing using Python Pillow
Python OpenCV Histogram Equalization