we have released version 0.6 of the igraph package today. This is a
major new version, with a lot of new features, and (sadly) it is not
completely compatible with code that was written for the previous
igraph versions. (See “Major new features” below for details.)
I have included below a list of (bigger) changes. Please see the
details in the release notes and the NEWS section at the igraph
Major new features
– Vertices and edges are numbered from 1 instead of 0.
Note that this makes most of the old R igraph code incompatible
with igraph 0.6. If you want to use your old code, please use
the igraph0 package. See more at http://igraph.sf.net/relnotes-
– The ‘[‘ and ‘[[‘ operators can now be used on igraph graphs,
for ‘[‘ the graph behaves as an adjacency matrix, for ‘[[‘ is
is treated as an adjacency list. It is also much simpler to
manipulate the graph structure, i.e. add/remove edges and vertices,
with some new operators. See more at ?graph.structure.
– In all functions that take a vector or list of vertices or edges,
vertex/edge names can be given instead of the numeric ids.
– New package ‘igraphdata’, contains a number of data sets that can
be used directly in igraph.
– Igraph now supports loading graphs from the Nexus online data
repository, see nexus.get(), nexus.info(), nexus.list() and
– All the community structure finding algorithm return a ‘communities’
object now, which has a bunch of useful operations, see
?communities for details.
– Vertex and edge attributes are handled much better now. They
are kept whenever possible, and can be combined via a flexible API.
– R now prints igraph graphs to the screen in a more structured and
informative way. The output of summary() was also updated
R: Other new features
– It is possible to mark vertex groups on plots, via
shading. Communities and cohesive blocks are plotted using this by
– Some igraph demos are now available, see a list via
– igraph now tries to select the optimal layout algorithm, when
plotting a graph.
– Added a simple console, using Tcl/Tk. It contains a text area
for status messages and also a status bar. See igraph.console().
– Reimplemented igraph options support, see igraph.options() and
– Igraph functions can now print status messages.
R: New or updated functions
– The multi-level modularity optimization community structure detection
algorithm by Blondel et al. was added, see multilevel.community().
– Distance between two community structures: compare.communities().
– Community structure via exact modularity optimization,
– Hierarchical random graphs and community finding, porting the code
from Aaron Clauset. See hrg.game(), hrg.fit(), etc.
– Added the InfoMAP community finding method, thanks to Emmanuel
Navarro for the code. See infomap.community().
– Eccentricity (eccentricity()), and radius (radius()) calculations.
– Shortest path calculations with get.shortest.paths() can now
return the edges along the shortest paths.
– get.all.shortest.paths() now supports edge weights.
– Centralization scores for degree, closeness, betweenness and
eigenvector centrality. See centralization.scores().
– Personalized Page-Rank scores, see page.rank().
– Subgraph centrality, subgraph.centrality().
– Authority (authority.score()) and hub (hub.score()) scores support
edge weights now.
– Support edge weights in betweenness and closeness calculations.
– bonpow(), Bonacich’s power centrality and alpha.centrality(),
Alpha centrality calculations now use sparse matrices by default.
– Eigenvector centrality calculation, evcent() now works for
– Betweenness calculation can now use arbitrarily large integers,
this is required for some lattice-like graphs to avoid overflow.
Input/output and file formats
– Support the DL file format in graph.read(). See
– Support writing the LEDA file format in write.graph().
Plotting and layouts
– Star layout: layout.star().
– Layout based on multidimensional scaling, layout.mds().
– New layouts layout.grid() and layout.grid.3d().
– Sugiyama layout algorithm for layered directed acyclic graphs,
– New graph generators: static.fitness.game(), static.power.law.game().
– barabasi.game() was rewritten and it supports three algorithms now,
the default algorithm does not generate multiple or loop edges.
The graph generation process can now start from a supplied graph.
– The Watts-Strogatz graph generator, igraph_watts_strogatz() can
now create graphs without loop edges.
– Added the Spectral Coarse Graining algorithm, see scg().
– The cohesive.blocks() function was rewritten in C, it is much faster
now. It has a nicer API, too. See demo(“cohesive”).
– Added generic breadth-first and depth-first search implementations
with many callbacks, graph.bfs() and graph_dfs().
– Support vertex and edge coloring in the VF2 (sub)graph isomorphism
functions (graph.isomorphic.vf2(), graph.count.isomorphisms.vf2()
– Assortativity coefficient, assortativity(), assortativity.nominal()
– Vertex operators that work by vertex names:
graph.difference.by.name(). Thanks to Magnus Torfason for
contributing his code!
– Function to calculate a non-induced subraph: subgraph.edges().
– More comprehensive maximum flow and minimum cut calculation,
see functions graph.maxflow(), graph.mincut(), stCuts(), stMincuts().
– Check whether a directed graph is a DAG, is.dag().
– has.multiple() to decide whether a graph has multiple edges.
– Added a function to calculate a diversity score for the vertices,
– Graph Laplacian calculation (graph.laplacian()) supports edge
– Biconnected component calculation, biconnected.components()
now returns the components themselves.
– bipartite.projection() calculates multiplicity of edges.
– Maximum cardinality search: maximum.cardinality.search() and
chordality test: is.chordal()
– Convex hull computation, convex.hull().
– Contract vertices, contract.vertices().