Warning! I posted the question when Mathematica v 8.0 was the coolest kid. The bug has been solved as of version 9.0.1
The help for EdgeLabels states:
For a regular GraphPlot
, you will need a slightly more complicated solution using EdgeRenderingFunction
(documentation). Suppose you have an adjacency matrix where the elements are also the (directional) weights.
lilnums = {{0, 2., 1., 3., 0, 6.}, {0, 0, 1., 2., 0, 0}, {1., 8., 0, 2., 0,
2.}, {10., 13., 7., 0, 0, 10.}, {0, 0, 0, 0, 0, 0}, {4., 1., 1., 2.,
2., 0}}
Here are some labels for the vertices, supposing you are drawing network diagrams for international inter-bank exposures (the original has a lot more countries!).
names = {"AT", "AU", "CA", "CH", "CL", "ES"}
The following does what you need. The tricks are the reference back to the adjacency matrix using the parts of #2
inside the part specification, to reference the correct elements of nums
, and the Mean[#1]
to locate the label at the midpoint of the edge. The slot #1
seems to hold the coordinates of the vertices.
GraphPlot[lilnums, DirectedEdges -> True,
VertexRenderingFunction -> ({White, EdgeForm[Black], Disk[#, .04],
Black, Text[names[[#2]], #1]} &),
EdgeRenderingFunction -> ({AbsoluteThickness[2], Red,
Arrowheads[0.02], Arrow[#1, 0.05], Black,
Text[Round@ Abs[(lilnums[[#2[[1]], #2[[2]]]] +
lilnums[[#2[[2]], #2[[1]]]])], Mean[#1],
Background -> Yellow]} &), VertexLabeling -> True,
ImageSize -> 600,
PlotLabel -> Style["Plot Label", Bold, 14, FontFamily -> "Arial"]]