# NextworkX Python Overview

The Python **NetworkX module** contains tools for creating and manipulating, visualising networks, also known as graphs. This is not only a graph drawing package, but also collaborate with Matplotlib. By using this, we can implement a 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 format to several others.

## Python install NetworkX

The **NetworkX** can be installed using pip, Miniconda/Anaconda and from the source code. Here, we have installed using the 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)
```

## Import NetworkX

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.

`g.remove_node(2)`

## Adding and Removing Edges

The **add_edge()** and **add_edges_from()** methods are used to add single edges, lists of edges, or containers 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.

`g.remove_edge(1,2)`

## Simple Example

```
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 an undirected graph, but we can also convert it to a directed graph. To convert to a directed graph, use **to_directed()** method. It returns the directed representation of the 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 Articles

**How 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

Convert Python list to numpy array

Convert string to list Python

Python program to list even and odd numbers of a list

Python loop through list

Sort list in descending order Python

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

Convert Python list to numpy array

Convert string to list Python

Python program to list even and odd numbers of a list

Python loop through list

Sort list in descending order Python