Note
This documents the development version of NetworkX. Documentation for the current release can be found here.
Graph types¶
NetworkX provides data structures and methods for storing graphs.
All NetworkX graph classes allow (hashable) Python objects as nodes and any Python object can be assigned as an edge attribute.
The choice of graph class depends on the structure of the graph you want to represent.
Which graph class should I use?¶
Networkx Class 
Type 
Selfloops allowed 
Parallel edges allowed 

Graph 
undirected 
Yes 
No 
DiGraph 
directed 
Yes 
No 
MultiGraph 
undirected 
Yes 
Yes 
MultiDiGraph 
directed 
Yes 
Yes 
Basic graph types¶
Note
NetworkX uses dicts
to store the nodes and neighbors in a graph.
So the reporting of nodes and edges for the base graph classes will not
necessarily be consistent across versions and platforms. If you need the
order of nodes and edges to be consistent (e.g., when writing automated
tests), please see OrderedGraph
,
OrderedDiGraph
, OrderedMultiGraph
,
or OrderedMultiDiGraph
, which behave like the base
graph classes but give a consistent order for reporting of nodes and edges.
Graph Views¶
View of Graphs as SubGraph, Reverse, Directed, Undirected.
In some algorithms it is convenient to temporarily morph a graph to exclude some nodes or edges. It should be better to do that via a view than to remove and then readd. In other algorithms it is convenient to temporarily morph a graph to reverse directed edges, or treat a directed graph as undirected, etc. This module provides those graph views.
The resulting views are essentially readonly graphs that report data from the orignal graph object. We provide an attribute G._graph which points to the underlying graph object.
Note: Since graphviews look like graphs, one can end up with viewofviewofview chains. Be careful with chains because they become very slow with about 15 nested views. For the common simple case of node induced subgraphs created from the graph class, we shortcut the chain by returning a subgraph of the original graph directly rather than a subgraph of a subgraph. We are careful not to disrupt any edge filter in the middle subgraph. In general, determining how to shortcut the chain is tricky and much harder with restricted_views than with induced subgraphs. Often it is easiest to use .copy() to avoid chains.



View of 

View of 
Core Views¶
Views of core data structures such as nested Mappings (e.g. dictofdicts).
These Views
often restrict element access, with either the entire view or
layers of nested mappings being readonly.

An AtlasView is a Readonly Mapping of Mappings. 
An AdjacencyView is a Readonly Map of Maps of Maps. 

An MultiAdjacencyView is a Readonly Map of Maps of Maps of Maps. 


A readonly union of two atlases (dictofdict). 

A readonly union of dict Adjacencies as a Map of Maps of Maps. 

A readonly union of two inner dicts of MultiAdjacencies. 

A readonly union of two dict MultiAdjacencies. 







Filters¶
Note
Filters can be used with views to restrict the view (or expand it). They can filter nodes or filter edges. These examples are intended to help you build new ones. They may instead contain all the filters you ever need.
Filter factories to hide or show sets of nodes and edges.
These filters return the function used when creating SubGraph
.




















