NetworkX
   HOME

TheInfoList



OR:

NetworkX is a
Python Python may refer to: Snakes * Pythonidae, a family of nonvenomous snakes found in Africa, Asia, and Australia ** ''Python'' (genus), a genus of Pythonidae found in Africa and Asia * Python (mythology), a mythical serpent Computing * Python (prog ...
library for studying
graphs Graph may refer to: Mathematics *Graph (discrete mathematics), a structure made of vertices and edges **Graph theory, the study of such graphs and their properties * Graph (topology), a topological space resembling a graph in the sense of discre ...
and
networks Network, networking and networked may refer to: Science and technology * Network theory, the study of graphs as a representation of relations between discrete objects * Network science, an academic field that studies complex networks Mathematics ...
. NetworkX is
free software Free software, libre software, libreware sometimes known as freedom-respecting software is computer software distributed open-source license, under terms that allow users to run the software for any purpose as well as to study, change, distribut ...
released under the BSD-new license.


History

NetworkX began development in 2002 by Aric A. Hagberg, Daniel A. Schult, and Pieter J. Swart.Aric A. Hagberg, Daniel A. Schult, Pieter J. Swart
Exploring Network Structure, Dynamics, and Function using NetworkX
''Proceedings of the 7th Python in Science conference (SciPy 2008)'', G. Varoquaux, T. Vaught, J. Millman (Eds.), pp. 11–15.
It is supported by the
National Nuclear Security Administration The National Nuclear Security Administration (NNSA) is a United States federal agency responsible for safeguarding national security through the military application of nuclear science. NNSA maintains and enhances the safety, security, and ef ...
of the
U.S. Department of Energy The United States Department of Energy (DOE) is an executive department of the U.S. federal government that oversees U.S. national energy policy and energy production, the research and development of nuclear power, the military's nuclear we ...
at
Los Alamos National Laboratory Los Alamos National Laboratory (often shortened as Los Alamos and LANL) is one of the sixteen research and development Laboratory, laboratories of the United States Department of Energy National Laboratories, United States Department of Energy ...
. The package was crafted with the aim of creating tools to analyze data and intervention strategies for controlling the epidemic spread of disease, while also exploring the structure and dynamics of more general social, biological, and infrastructural systems. Inspired by
Guido van Rossum Guido van Rossum (; born 31 January 1956) is a Dutch programmer. He is the creator of the Python programming language, for which he was the " benevolent dictator for life" (BDFL) until he stepped down from the position on 12 July 2018. He ...
's 1998 essay on Python graph representation, NetworkX made its public debut at the 2004
SciPy SciPy (pronounced "sigh pie") is a free and open-source Python library used for scientific computing and technical computing. SciPy contains modules for optimization, linear algebra, integration, interpolation, special functions, fast Fourier ...
annual conference. In April 2005, NetworkX was made available as open source software. Several Python packages focusing on
graph theory In mathematics and computer science, graph theory is the study of ''graph (discrete mathematics), graphs'', which are mathematical structures used to model pairwise relations between objects. A graph in this context is made up of ''Vertex (graph ...
, including igraph,
graph-tool graph-tool is a Python (programming language), Python module for manipulation and statistical analysis of Graph (discrete mathematics), graphs (AKA Network theory, networks). The core data structures and algorithms of graph-tool are implemented ...
, and numerous others, are available. As of April 2024, NetworkX had over 50 million downloads, surpassing the download count of the second most popular package, igraph, by more than 50-fold. This substantial adoption rate could potentially be attributed to NetworkX's early release and its continued evolution within the SciPy ecosystem. In 2008,
SageMath SageMath (previously Sage or SAGE, "System for Algebra and Geometry Experimentation") is a computer algebra system (CAS) with features covering many aspects of mathematics, including algebra, combinatorics, graph theory, group theory, differentia ...
, an open source mathematics system, incorporated NetworkX into its package and added support for more graphing algorithms and functions.


Features

* Classes for graphs and digraphs. * Conversion of graphs to and from several formats. * Ability to construct
random graph In mathematics, random graph is the general term to refer to probability distributions over graphs. Random graphs may be described simply by a probability distribution, or by a random process which generates them. The theory of random graphs l ...
s or construct them incrementally. * Ability to find subgraphs,
cliques A clique ( AusE, CanE, or ; ), in the social sciences, is a small group of individuals who interact with one another and share similar interests rather than include others. Interacting with cliques is part of normative social development regardle ...
, k-cores. * Explore adjacency, degree,
diameter In geometry, a diameter of a circle is any straight line segment that passes through the centre of the circle and whose endpoints lie on the circle. It can also be defined as the longest Chord (geometry), chord of the circle. Both definitions a ...
,
radius In classical geometry, a radius (: radii or radiuses) of a circle or sphere is any of the line segments from its Centre (geometry), center to its perimeter, and in more modern usage, it is also their length. The radius of a regular polygon is th ...
,
center Center or centre may refer to: Mathematics *Center (geometry), the middle of an object * Center (algebra), used in various contexts ** Center (group theory) ** Center (ring theory) * Graph center, the set of all vertices of minimum eccentrici ...
,
betweenness Betweenness is a noun derived from the proposition between. It may refer to: * The ternary relation of intermediacy or betweenness, a feature of ordered geometry. * Betweenness problem - an algorithmic problem. The input is a collection of ordered ...
, etc. * Draw networks in 2D and 3D.


Supported graph types


Overview

Graphs, in this context, represent collections of vertices (nodes) and
edges Enhanced Data rates for GSM Evolution (EDGE), also known as 2.75G and under various other names, is a 2G digital mobile phone technology for packet switched data transmission. It is a subset of General Packet Radio Service (GPRS) on the GS ...
(connections) between them. NetworkX provides support for several types of graphs, each suited for different applications and scenarios.


Directed graphs (DiGraph)

Directed graphs, or DiGraphs, consist of nodes connected by directed edges. In a directed graph, edges have a direction indicating the flow or relationship between nodes.


Undirected graphs (Graph)

Undirected graphs, simply referred to as graphs in NetworkX, are graphs where edges have no inherent direction. The connections between nodes are symmetrical, meaning if node A is connected to node B, then node B is also connected to node A.


MultiGraphs

MultiGraphs allow multiple edges between the same pair of nodes. In other words, MultiGraphs permit parallel edges, where more than one edge can exist between two nodes.


MultiDiGraphs

MultiDiGraphs are directed graphs that allow multiple directed edges between the same pair of nodes. Similar to MultiGraphs, MultiDiGraphs enable the modeling of scenarios where multiple directed relationships exist between nodes.


Challenges in visualization

While NetworkX provides powerful tools for graph creation and analysis, producing visualizations of complex graphs can be challenging. Visualizing large or densely connected graphs may require specialized techniques and external libraries beyond the capabilities of NetworkX alone.


Graph layouts

NetworkX provides various layout
algorithm In mathematics and computer science, an algorithm () is a finite sequence of Rigour#Mathematics, mathematically rigorous instructions, typically used to solve a class of specific Computational problem, problems or to perform a computation. Algo ...
s for visualizing graphs in two-dimensional space. These layout algorithms determine the positions of nodes and edges in a graph visualization, aiming to reveal its structure and relationships effectively.


Spring layout

The Spring Layout in NetworkX is a popular way to visualize graphs using a force-directed algorithm. It’s based on the Fruchterman-Reingold model, which works like a virtual physics simulation. Each node in your graph is a charged particle that repels other nodes, while the edges act like springs that pull connected nodes closer together. This balance creates a layout where the graph naturally spreads out into an informative shape. As the algorithm runs, it tries to reduce the overall "energy" of the system by adjusting the positions of the nodes step by step. The result often highlights patterns in the graph—like clusters or groups of nodes that are tightly connected. It works best for small to medium-sized graphs, where clarity and appearance are important. You can create this layout in NetworkX using the spring_layout() function, found in networkx.drawing.layout. The function gives you a few options to customize the layout, you can control the distance between nodes with the k parameter or decide how many iterations the simulation should run. It lets you lay out the graph in more than two dimensions by setting the dim parameter. G = nx.path_graph(4) pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True)This layout method is used for interactive and exploratory visualizations. The spring layout often reveals the structure of the graph in a intuitive and readable way


Spectral layout

The Spectral layout is based on the spectral properties of the graph's
adjacency matrix In graph theory and computer science, an adjacency matrix is a square matrix used to represent a finite graph (discrete mathematics), graph. The elements of the matrix (mathematics), matrix indicate whether pairs of Vertex (graph theory), vertices ...
. It uses the
eigenvalues and eigenvectors In linear algebra, an eigenvector ( ) or characteristic vector is a vector that has its direction unchanged (or reversed) by a given linear transformation. More precisely, an eigenvector \mathbf v of a linear transformation T is scaled by a ...
of the adjacency matrix to position nodes in a low-dimensional space. Spectral layout tends to emphasize the global structure of the graph, making it useful for identifying clusters and
communities A community is a Level of analysis, social unit (a group of people) with a shared socially-significant characteristic, such as place (geography), place, set of Norm (social), norms, culture, religion, values, Convention (norm), customs, or Ide ...
.


How the spectral layout work

Source: * Construct the
Laplacian matrix In the mathematical field of graph theory, the Laplacian matrix, also called the graph Laplacian, admittance matrix, Kirchhoff matrix, or discrete Laplacian, is a matrix representation of a graph. Named after Pierre-Simon Laplace, the graph Lap ...
of the graph. ::A Laplacian matrix ''L of a graph is defined'' as L=D-A, where D is the degree matrix (a diagonal matrix where D_ is the degree of vertex i) and A is the adjacency matrix. ::For a graph G with ''n'' vertices, the adjacency matrix ''A'' is an n × n matrix where A_ = 1 if there is an edge between vertex i and vertex i and A_ = 0 otherwise. ::The Laplacian matrix has eigenvalues and corresponding eigenvectors that encode the graph's structural properties. * Compute the eigenvectors corresponding to the smallest non-zero eigenvalues. * Use these eigenvectors as coordinate values for positioning vertices. * X-coordinates come from the second eigenvector (associated with the second-smallest eigenvalue), and Y-coordinates come from the third eigenvector. * Scale and center the resulting layout as needed.


Why it reveals the network's structure

* Nodes in dense clusters have similar eigenvector entries, causing them to group spatially. *The
Fiedler vector The algebraic connectivity (also known as Fiedler value or Fiedler eigenvalue after Miroslav Fiedler) of a graph ' is the second-smallest eigenvalue (counting multiple eigenvalues separately) of the Laplacian matrix of '. This eigenvalue is great ...
(second eigenvector) minimizes the ratio cut, separating the graph into clusters with minimal interconnections. In the plot above, we observe that the spectral layout helps capture the global and communal structures embedded in the graph. Comparing both layouts, we see that the spectral layout keeps nodes belonging to the same community closely packed, thereby capturing communities more easily as compared to the spring layout.


Codes for implementing the plot

import numpy as np import matplotlib.pyplot as plt import networkx as nx # Generate a graph with overlapping nodes in spectral layout G = nx.karate_club_graph() L = nx.laplacian_matrix(G).todense() # Compute eigenvectors of L for spectral layout eigenvals, eigenvecs = np.linalg.eigh(L) fiedler_vector = eigenvecs
, 1 The comma is a punctuation mark that appears in several variants in different languages. Some typefaces render it as a small line, slightly curved or straight, but inclined from the vertical; others give it the appearance of a miniature fille ...
# Second smallest eigenvector eigenvec2 = eigenvecs
, 2 The comma is a punctuation mark that appears in several variants in different languages. Some typefaces render it as a small line, slightly curved or straight, but inclined from the vertical; others give it the appearance of a miniature fille ...
# Third smallest eigenvector # Create spectral layout (2D: use Fiedler vector for x-coord, zeros for y-coord) pos_spectral = # Define layouts to compare layouts = # Plot all layouts plt.figure(figsize=(15, 8)) for i, (title, pos) in enumerate(layouts.items(), 1): plt.subplot(1, 2, i) nx.draw(G, pos, with_labels=True, node_color='skyblue', node_size=800, font_size=10) plt.title(title) plt.tight_layout() plt.savefig('Spec_layout.png') plt.show()


Circular layout

The Circular layout arranges nodes evenly around a circle, with edges drawn as straight lines connecting them. This layout is particularly suitable for visualizing
cyclic Cycle, cycles, or cyclic may refer to: Anthropology and social sciences * Cyclic history, a theory of history * Cyclical theory, a theory of American political history associated with Arthur Schlesinger, Sr. * Social cycle, various cycles in s ...
or
symmetric graph In the mathematical field of graph theory, a graph is symmetric or arc-transitive if, given any two ordered pairs of adjacent vertices (u_1,v_1) and (u_2,v_2) of , there is an automorphism :f : V(G) \rightarrow V(G) such that :f(u_1) = u_2 a ...
s, where the arrangement of nodes along the circle reflects the underlying topology of the graph.


Shell layout

The Shell layout organizes nodes into concentric circles or shells based on their distance from a specified center. Nodes within the same shell have the same distance from the center, while edges are drawn radially between nodes in adjacent shells. Shell layout is often used for visualizing hierarchical or tree structures.


Sample code

# simple shell‐layout example G = nx.balanced_tree(2, 2) shells = 0
, 2 The comma is a punctuation mark that appears in several variants in different languages. Some typefaces render it as a small line, slightly curved or straight, but inclined from the vertical; others give it the appearance of a miniature fille ...
, 4, 5, 6 pos = nx.shell_layout(G, nlist=shells) nx.draw(G, pos, with_labels=True)


Kamada–Kawai layout

The Kamada–Kawai layout algorithm positions nodes based on their pairwise distances, aiming to minimize the total energy of the system. It takes into account both the graph's topology and edge lengths, resulting in a layout that emphasizes geometric accuracy and readability.


Random Layout

Random layout assigns each node a random position inside the unit square (or specified box). It’s trivial and fast—O(n)—but gives no information about graph structure. Use it as a baseline to compare against more meaningful layouts, or when you just need an initial seeding for iterative algorithms. It’s also handy for stress-testing your rendering pipeline.


Planar Layout

Planar layout attempts to compute an embedding for planar graphs (graphs with no edge crossings) using graph combinatorial embedding. If the graph isn’t planar, it raises an exception. Planar embeddings exactly preserve the topology of planar networks—useful for circuit schematics, maps, or any truly planar structure. When it works, edges don’t cross, giving a clean representation. It’s linear‐time but only applicable to planar graphs.


Fruchterman–Reingold Layout

Although “spring layout” and “Fruchterman–Reingold” are often used interchangeably, NetworkX exposes both via spring_layout and fruchterman_reingold_layout. Internally they share the same physics-based algorithm. You can tweak attraction/repulsion constants, number of iterations, and temperature schedules. It produces an “organic” network view that highlights dense subgraphs. Use it when you want a familiar force-directed aesthetic with customizable parameters.


Spiral Layout

Spiral layout places nodes along an outward spiral, one after another in node order. It’s deterministic and extremely fast—useful for very large graphs where more expensive layouts would be too slow. Although it doesn’t use graph connectivity, you can impose ordering to reveal sequences or ranking. Because the spiral arms grow apart as they wind out, it can reduce overlap compared to a pure line or circle. It’s primarily a novelty, but useful for displaying long chains or temporal orderings.


Bipartite Layout

Bipartite layout is specialized for two‐set graphs: it places one node set on a horizontal line at y=0 and the other at y=1. You must supply the two partitions (e.g. via a node attribute or explicit list). Edges then connect vertically between layers, making the bipartite structure immediately clear. It’s ideal for affiliation networks, two‐mode data, or any graph with exactly two types of nodes. Positioning along the x-axis is usually automatic, but you can override via the align or manual x-coordinates.


Multipartite Layout

Multipartite layout generalizes bipartite: it places nodes in multiple horizontal layers (or “partitions”) based on a node attribute (e.g. layer). Each partition is drawn on its own y-coordinate rung, and edges run between adjacent layers by default. This makes it perfect for multilevel DAGs, workflow diagrams, or any graph with more than two strata. You control the vertical spacing and ordering within each layer. It’s computed in linear time after grouping nodes by their partition key.


BFS Layout

BFS layout (in our demo implemented via shell layout on BFS layers) arranges nodes by their distance from a source node. All nodes at distance d go to shell d. This visually encodes hop count from the root, so you see exactly how far each node lies in the graph. It’s perfect for shortest-path or reachability visualizations. Because it uses pure breadth-first search, it’s linear (O(n + m)) to compute.


Usage

NetworkX provides functions for applying different layout algorithms to graphs and visualizing the results using
Matplotlib Matplotlib (portmanteau of MATLAB, plot, and library) is a Plotter, plotting Library (computer science), library for the Python (programming language), Python programming language and its Numerical analysis, numerical mathematics extension NumPy. ...
or other plotting libraries. Users can specify the desired layout algorithm when calling the drawing functions, allowing for flexible and customizable graph visualizations.


Suitability

NetworkX is suitable for operation on large real-world graphs: e.g., graphs in excess of 10 million nodes and 100 million edges. Due to its dependence on a pure-Python "dictionary of dictionary" data structure, NetworkX is a reasonably efficient, very
scalable Scalability is the property of a system to handle a growing amount of work. One definition for software systems specifies that this may be done by adding resources to the system. In an economic context, a scalable business model implies that ...
, highly portable framework for network and
social network analysis Social network analysis (SNA) is the process of investigating social structures through the use of networks and graph theory. It characterizes networked structures in terms of ''nodes'' (individual actors, people, or things within the network) ...
.


Applications

NetworkX was designed to be easy to use and learn, as well as a powerful and sophisticated tool for network analysis. It is used widely on many levels, ranging from computer science and data analysis education to large-scale scientific studies. NetworkX has applications in any field that studies data as graphs or networks, such as mathematics, physics, biology, computer science and social science. The nodes in a NetworkX graph can be specialized to hold any data, and the data stored in edges is arbitrary, further making it widely applicable to different fields. It is able to read in networks from data and randomly generate networks with specified qualities. This allows it to be used to explore changes across wide amounts of networks. The figure below demonstrates a simple example of the software's ability to create and modify variations across large amounts of networks. NetworkX has many network and graph analysis algorithms, aiding in a wide array of data analysis purposes. One important example of this is its various options for shortest path algorithms. The following algorithms are included in NetworkX, with time complexities given the number of vertices (V) and edges (E) in the graph: *
Dijkstra Dijkstra ( ) is a Dutch language, Dutch family name of West Frisian language, West Frisian origin. It most commonly refers to: * Edsger W. Dijkstra (1930–2002), Dutch computer scientist ** Named after him: Dijkstra's algorithm, Dijkstra Prize, Di ...
: O((V+E) log V) * Bellman-Ford: O(V * E) * Goldberg-Radzik: O(V * E) *
Johnson Johnson may refer to: People and fictional characters *Johnson (surname), a common surname in English * Johnson (given name), a list of people * List of people with surname Johnson, including fictional characters *Johnson (composer) (1953–2011) ...
: O(V^2 log(V) + VE) * Floyd Warshall: O(V^3) * A*: O((V+E) log V) An example of the use of NetworkX graph algorithms can be seen in a 2018 study, in which it was used to analyze the resilience of livestock production networks to the spread of epidemics. The study used a computer model to predict and study trends in epidemics throughout American hog production networks, taking into account all livestock industry roles. In the study, NetworkX was used to find information on degree, shortest paths, clustering, and k-cores as the model introduced infections and simulated their spread. This was then used to determine which networks are most susceptible to epidemics. In addition to network creation and analysis, NetworkX also has many visualization capabilities. It provides hooks into
Matplotlib Matplotlib (portmanteau of MATLAB, plot, and library) is a Plotter, plotting Library (computer science), library for the Python (programming language), Python programming language and its Numerical analysis, numerical mathematics extension NumPy. ...
and
GraphViz Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
for 2D visuals, and
VTK The Visualization Toolkit (VTK) is a free software system for 3D computer graphics, image processing and scientific visualization.''Visualization Handbook'', Academic Press, 2005, Chapter 30: the Visualization Toolkit/ref> VTK is distributed und ...
and UbiGraph for 3D visuals. This makes the package useful in easily demonstrating and reporting network analysis and data, and allows for the simplification of networks for visual processing.


Comparison with Matlab

MATLAB MATLAB (an abbreviation of "MATrix LABoratory") is a proprietary multi-paradigm programming language and numeric computing environment developed by MathWorks. MATLAB allows matrix manipulations, plotting of functions and data, implementat ...
allows the user to graph networks. Matlab is widely used to graph networks by mathematicians, physicists, biologists, and computer scientists. Matlab graphs can be more useful than Python-Networkx graphs under many circumstances.


Dealing with large data

The main issue with Networkx is memory usage when dealing with large graphs. Networkx stores graph data in Python objects which makes it incapable of handling tens of millions of objects without consuming the computer memory. This causes an out-of-memory errors when working with large graphs. On the other hand, Matlab works differently. Matlab processes large sets of data more efficiently by integrating them with the existing infrastructure. The user can scale up and run their Matlab code interactively using parallel processing as well as in deployed production mode. The user can also run their Matlab code with a large set of data on different cloud data such as
Databricks Databricks, Inc. is a global data, analytics, and artificial intelligence (AI) company, founded in 2013 by the original creators of Apache Spark. The company provides a cloud-based platform to help enterprises build, scale, and govern data an ...

Domino Data Lab
and Google® BigQuery.


Cost

Python is an open-source programming language. It can be downloaded and used completely with no charge. Also, Many widely used Python libraries and packages (including NetworkX) are completely free. While, MATLAB has 6 pricing edition(s), from $49 to $2,150. Matlab pricing varies depending on the type of the license. For example, High school and college students can get a Matlab license with a lower cost than individuals and business owners.


Getting access to Networkx through Matlab

MATLAB provides interoperability with other languages such as Python. Matlab provides access to many programming languages including C/C++, Java, and Python. Networkx can be called from Matlab which gives the user the advantage of using it within Matlab workflow. This allows the user to call Python-Networkx codes in Matlab.


Applications to pure mathematics

Networks are useful tools to visualize, which helps with analyzing or making good predictions, which helps researchers generalize ideas. It gives the clear picture when dealing with a finite set. It can be used in different fields of mathematics like Set Theory, Abstract Algebra, and Number Theory.


Graph a subgroups lattice of a group

Lattice of subgroups
can be graphed for finite
groups A group is a number of persons or things that are located, gathered, or classed together. Groups of people * Cultural group, a group whose members share the same cultural identity * Ethnic group, a group whose members share the same ethnic iden ...
with a reasonable
order Order, ORDER or Orders may refer to: * A socio-political or established or existing order, e.g. World order, Ancien Regime, Pax Britannica * Categorization, the process in which ideas and objects are recognized, differentiated, and understood ...
.


Graph ordered relations

Ordered relations
on finite sets with reasonable size (
cardinality The thumb is the first digit of the hand, next to the index finger. When a person is standing in the medical anatomical position (where the palm is facing to the front), the thumb is the outermost digit. The Medical Latin English noun for thum ...
) can be graphed.


Graph equivalence relations

An
Equivalence relation In mathematics, an equivalence relation is a binary relation that is reflexive, symmetric, and transitive. The equipollence relation between line segments in geometry is a common example of an equivalence relation. A simpler example is equ ...
on a finite set with reasonable size can be graphed with Networkx. This is a helpful way to visualize it as it clearly shows the different
equivalence class In mathematics, when the elements of some set S have a notion of equivalence (formalized as an equivalence relation), then one may naturally split the set S into equivalence classes. These equivalence classes are constructed so that elements ...
es.


Integration

NetworkX is integrated into
SageMath SageMath (previously Sage or SAGE, "System for Algebra and Geometry Experimentation") is a computer algebra system (CAS) with features covering many aspects of mathematics, including algebra, combinatorics, graph theory, group theory, differentia ...
.


See also

*
Social network analysis software Social network analysis (SNA) software is software which facilitates quantitative analysis of behavior, quantitative or qualitative research, qualitative social network analysis, analysis of social networks, by describing features of a network eit ...
*
JGraph diagrams.net (previously draw.io) is a cross-platform graph drawing software application developed in HTML5 and JavaScript. Its interface can be used to create diagrams such as flowcharts, wireframes, UML diagrams, organizational charts, and n ...


References


External links

* Official website:
NetworkX discussion group

Survey of existing graph theory software

NetworkX on StackOverflow
* {{DEFAULTSORT:Networkx Free mathematics software Free software programmed in Python Graph drawing software Numerical software Software using the BSD license Python (programming language) scientific libraries