The igraph library

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.