igraph 0.6 Release Notes
igraph 0.6 is a major new release of igraph. It contains many new features and major changes, a lot of bug fixes and improvements. As always, we are grateful to the people who sent comments, bug reports, questions, and specially to people who contributed code.
See below a list of major changes, with links to the relevant sections
of the documentation. New features in R (look for the
logo),
Python, and
C are all listed here.
See the news page for a (more) complete list of changes.
The Nexus repository
igraph supports the Nexus network repository from R and from Python. Nexus is an online database of network data sets. You can search Nexus and download network from it directly from R and Python. See the R manual or the Python documentation for details.
Numbering from 1 in R
The biggest change in the R interface is that starting from this version vertices and edges are numbered from one. This change might be painful for many people, because it makes already existing code incompatible with igraph 0.6. To make the switch easier, there is now an igraph0 package on CRAN; igraph0 uses 0-based vertex and edge ids, and it can be used to run old code. Note, however, that igraph0 will not be developed in the future. Please use the igraph package for current and future work.
(Also note that in Python and C vertices and edges are still numbered from zero, as these languages traditionally use zero-based indexing.)
Support for Python 3.x
The Python interface of igraph now supports Python 3. The current release was tested with Python 3.2 on Windows, Linux and Mac OS X. Please report any bugs you encounter when using igraph in Python 3.x through the usual channels.
Community detection improvements
Community structure detection via exact modularity optimization. As modularity optimization in an NP-complete problem, this works only for small graphs. C manual, R manual, Python manual.
The multi-level modularity optimization algorithm by Blondel et al. was added. See the C Reference manual, the R documentation, or the Python documentation.
Hierarchical random graphs and community finding, based on the code from Aaron Clauset. In C, and R.
We support now the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. In C, R and Python.
The edge betweenness community detection method of Newman and Girvan now also works on weighted graphs. See the C Reference manual, the R documentation, or the Python documentation.
We have added some functions to compare various community structures. See the C Reference manual, the R documentation, or the Python documentation.
Igraph now implements the Spectral Coarse Graining method, by David Morton, our implementation is based on his code. See the C Reference manual or the R documentation.
The cohesive block finding functions were rewritten from scratch in C. They are much faster now, and they have a nicer API, too. See the C Reference manual, the R documentation, or the Python documentation.
In R, all community detection functions return a
'communities' object now. We have defined various
operations for these objects, see the
R manual for more.
Centrality-related functions
Centralization scores for degree, closeness, betweenness and eigenvector centrality. See the C Reference manual or the R documentation.
Personalized PageRank scores. See the C Reference manual, the R documentation, or the Python documentation.
Authority and hub scores, betweenness and closeness calculations all support edge weights now. See the C Reference manual, the R documentation, or the Python documentation.
Sugiyama layout
Igraph now implements the Sugiyama layout algorithm for layered directed acyclic graphs. See the C Reference manual, the R documentation, or the Python documentation.
Maximum matchings in bipartite graphs
Igraph now implements the push-relabel algorithm and the Kuhn-Munkres algorithm (also known as the Hungarian method) to find maximum matchings in unweighted and weighted bipartite graphs. See the C Reference manual, the R documentation, or the Python documentation.
Hiding the graph structure by
default
In R, if you type in the name of an igraph object, the edges of the graph are not dumped to the screen any more, only a short summary of the graph is printed:
> karate
IGRAPH UNW- 34 78 -- Zachary's karate club network
+ attr: name (g/c), Citation (g/c), Author (g/c), Faction (v/n), name (v/c), weight (e/n)
To see the graph structure, you can use the 'str()' function.
See more in the R
documentation.
Named graph vertices
The Python interface now treats the 'name' attributes in a special way.
The values of the attribute are indexed in the background, allowing the retrieval of
a vertex with a given name in amortized constant time. Furthermore, most of the
graph query methods accept vertex names as well as vertex indices.
See the Python documentation
for more information.
Pretty-printed graph summaries
The same graph summary format used by R is now also adopted by Python.
Printing a graph with the print statement now prints the
summary and the edge list in a concise format:
>>> print karate IGRAPH UNW- 34 78 -- Zachary's karate club network + attr: Author (g), Citation (g), name (g), Faction (v), id (v), name(v), weight (e) + edges (vertex names): Mr Hi -- Actor 2, Actor 3, Actor 4, Actor 5, ... Actor 2 -- Mr Hi, Actor 3, Actor 4, ... ...
Printing a graph with the summary() function (in
the igraph namespace) prints the short summary only, without the edge list:
>>> summary(karate)
IGRAPH UNW- 34 78 -- Zachary's karate club network
+ attr: Author (g), Citation (g), name (g), Faction (v), id (v), name(v),
weight (e)
Printing a graph with summary(graph, full=True) prints
the summary, the edge list, the vertex and the edge attributes as well.

Easier manipulation of graphs
In R, there are now new and easier ways to add new vertices/edges to a graph, or remove existing ones. See the details in the R documentation. In Python, you can treat the graph as a virtual adjacency matrix. See the details in the Python documentation.
The 'igraphdata' package
The new R package igraphdata contains some example graph data sets.

Mark groups of vertices in R and Python plots
In R and Python, you can mark vertex groups on graph plots, using shaded
areas. Communities and cohesive blocks are plotted using technique by
default. See the 'mark.groups' argument of
the 'plot.igraph()'
function in R and the 'mark_groups' argument of the
Graph.__plot__
function in Python.
Refactored graph drawers in the Python interface
Graphs in the Python interface are plotted by graph drawer classes now instead of a monolithic plotting function. This allows one to replace the default graph drawer with custom graph drawers; for instance, a drawer that sends an igraph graph to an UbiGraph display or to Cytoscape. The default graph drawer also allows the partial customization of the plot with pluggable vertex shapes and edge drawers.
igraph demos in the R package
We have included some demos in the igraph R package, to get a list of the demos, type this at your R prompt:
> demo(package="igraph")
Demos in package ‘igraph’:
centrality Classic and other vertex centrality indices
cohesive Cohesive blocking, the Moody & White method
community Community structure detection
crashR A crash-course into R
smallworld Small-world networks
Better handling of attributes in R and Python
In R and Python, many igraph functions keep the vertex, edge and graph attributes
now, when one manipulates the graph. The attributes can also be
combined using a flexible API. See
the R manual and the
'combine_edges' and 'combine_attrs' arguments
of many graph methods in the Python documentation for more.
