About igraph releases and other things
June 11, 2012
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 are all listed here.
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 documentation for details.
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 structure detection via exact modularity optimization. As modularity optimization in an NP-complete problem, this works only for small graphs, Python manual.
The multi-level modularity optimization algorithm by Blondel et al. was added. See documentation.
We support now the InfoMAP community finding method, thanks to Emmanuel Navarro for the code. More.
The edge betweenness community detection method of Newman and Girvan now also works on weighted graphs. See the documentation.
We have added some functions to compare various community structures. See the 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 documentation.
Personalized PageRank scores. See the documentation.
Authority and hub scores, betweenness and closeness calculations all support edge weights now. See the documentation.
Igraph now implements the Sugiyama layout algorithm for layered directed acyclic graphs. See the documentation.
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 documentation.
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 documentation
for more information.
The same graph summary format used by R is now also adopted by Python.
Printing a graph with the
>>> 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.
You can treat the graph as a virtual adjacency matrix. See the details in the documentation.
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
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.
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
of many graph methods in the
Python documentation for more.
Graph.eccentricity()), and radius (
Graph.get_shortest_paths()can now return the vertex or edge ids along the shortest paths.
Graph.get_all_shortest_paths()now supports edge weights.
Graph.authority_score()) and hub (
Graph.hub_score()) scores support edge weights now.
Graph.evcent()now works for directed graphs.
Graph.read(). See http://www.analytictech.com/networks/dataentry.htm.
mark_groupskeyword argument of
Graph.__plot__(). Communities and cohesive blocks are plotted using this by default. Note that the same keyword argument is also accepted by
AbstractGraphDrawer. The framework allows the implementation of custom graph drawers such as
CytoscapeDrawer. Edges are drawn by edge drawer classes (derived from
AbstractEdgeDrawer), custom vertex shapes are now possible by
edge_curvedkeyword arguments of
Graph.__plot__(). Note that these are also accepted by
rescale()function to rescale a list of numeric values to a different range, suitable for plotting.
Graph.Barabasi()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.
Graph.Watts_Strogatz()can now create graphs without loop edges.
combine_attrskeyword arguments of
print()prints a short information header and the edge list, while
summary()prints the heder only.
summary()also understands keyword arguments that control which parts of the output should be added; see the
Graph.similarity_jaccard_pairs()and similar functions.
Graph.has_multiple()to decide whether a graph has multiple edges.
Graph.laplacian()) supports edge weights now.
Graph.bipartite_projection()calculates multiplicity of edges.
We also fixed numerous bugs, too many to include them here, sorry. You may look at our bug tracker at https://bugs.launchpad.net/igraph to check whether a bug was fixed or not. Thanks for all the people reporting bugs. Special thanks to Minh Van Nguyen for a lot of bug reports, documentation fixes and contributed code!