# 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.

## Install Modules

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)
```

## 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 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.

`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 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 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

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