[graphviz-interest] Curious node ranking
"Pekka Pihlajasaari" <[email protected]> Mon, 3 Feb 2014 09:42:13 +0200
| Newsgroups | gmane.comp.video.graphviz |
|---|---|
| Message-ID | <89ACCC513C63C04E92840FEFC80D977C82FE67@dragonfruit.datacoza.local> |
I have generated Sankey diagrams in Graphviz using HTML-like labels to manage the ports positioning the various streams. The attached file (Sankey.txt) shows an example where the position of some of the nodes in the minimum rank are displayed in a curious order. The lexical positioning in the file does not match the laid out order and the weighting of the edges does not seem to contradict this. Initially I suspected the use of penwidth may have affected the layout, but see that this has no effect. Is it possible to understand the reason for this positioning, and is there any general solution? Or, is the connectedness of the graph at the limits that one should expect (nearly) correct processing? Regards Pekka Pihlajasaari -- [email protected] Data Abstraction (Pty) Ltd +27 11 484 9664 -- _______________________________________________ [email protected] http://lists.research.att.com/mailman/listinfo/graphviz-interest
Sankey.txt
(text/plain, 25.9 KB)
/* Sankey - Graphviz generated Sankey diagram from data */
digraph "Sankey" {
graph [rankdir=LR, ranksep=1];
node [shape=rect, fontsize=12, fontname=Arial];
edge [fontname=Arial, fontsize=9, dir=none];
"30" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="42" HEIGHT="72.00"></TD></TR>
<TR><TD PORT="31" HEIGHT="12.24"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Process 2</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="32" HEIGHT="64.80"></TD></TR>
<TR><TD PORT="43" HEIGHT="3.60"></TD></TR>
<TR><TD PORT="27" HEIGHT="7.20"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"31" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="22" HEIGHT="10.80"></TD></TR>
<TR><TD PORT="23" HEIGHT="1.44"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Support 1</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="30" HEIGHT="12.24"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"32" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="25" HEIGHT="36.00"></TD></TR>
<TR><TD PORT="30" HEIGHT="64.80"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Process 3</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="29" HEIGHT="36.00"></TD></TR>
<TR><TD PORT="33" HEIGHT="64.80"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"33" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="32" HEIGHT="64.80"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Process 4</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="29" HEIGHT="2.16"></TD></TR>
<TR><TD PORT="26" HEIGHT="50.40"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"42" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="21" HEIGHT="64.80"></TD></TR>
<TR><TD PORT="22" HEIGHT="7.20"></TD></TR>
<TR><TD PORT="24" HEIGHT="1.44"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Process 1</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="30" HEIGHT="72.00"></TD></TR>
</TABLE></TD></TR></TABLE>>];
{
rank = min;
"25" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Material 1</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="32" HEIGHT="36.00"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"21" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Material 2</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="42" HEIGHT="64.80"></TD></TR>
<TR><TD PORT="41" HEIGHT="3.60"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"22" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Material 3</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="42" HEIGHT="7.20"></TD></TR>
<TR><TD PORT="31" HEIGHT="10.80"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"24" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Material 4</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="42" HEIGHT="1.44"></TD></TR>
</TABLE></TD></TR></TABLE>>];
"23" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Material 5</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="31" HEIGHT="1.44"></TD></TR>
</TABLE></TD></TR></TABLE>>];
}
{
rank = max;
"26" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="33" HEIGHT="50.40"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Product 1</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD></TR></TABLE>>];
"27" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="30" HEIGHT="7.20"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Product 2</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD></TR></TABLE>>];
"28" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Product 3</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD></TR></TABLE>>];
"29" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="33" HEIGHT="2.16"></TD></TR>
<TR><TD PORT="32" HEIGHT="36.00"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Product 4</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD></TR></TABLE>>];
"41" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="21" HEIGHT="3.60"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Product 5</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD></TR></TABLE>>];
"43" [margin=0, label=<<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
<TR><TD PORT="30" HEIGHT="3.60"></TD></TR>
</TABLE></TD>
<TD WIDTH="72">Product 6</TD><TD><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR><TD></TD></TR>
</TABLE></TD></TR></TABLE>>];
}
"21":"41":e -> "41":"21":w [/* label="0.05" */ x=1, color="#ee760080", penwidth=3.60, weight=0.0];
"21":"42":e -> "42":"21":w [/* label="0.9" */ x=1, color="#ee760080", penwidth=64.80, weight=8.1];
"22":"31":e -> "31":"22":w [/* label="0.15" */ x=1, color="#20202080", penwidth=10.80, weight=0.2];
"22":"42":e -> "42":"22":w [/* label="0.1" */ x=1, color="#20202080", penwidth=7.20, weight=0.1];
"23":"31":e -> "31":"23":w [/* label="0.02" */ x=1, color="#ee760080", penwidth=1.44, weight=0.0];
"24":"42":e -> "42":"24":w [/* label="0.02" */ x=1, color="#ee760080", penwidth=1.44, weight=0.0];
"25":"32":e -> "32":"25":w [/* label="0.5" */ x=1, color="#00006080", penwidth=36.00, weight=2.5];
"30":"27":e -> "27":"30":w [/* label="0.1" */ x=1, color="#ee760080", penwidth=7.20, weight=0.1];
"30":"32":e -> "32":"30":w [/* label="0.9" */ x=1, color="#ee760080", penwidth=64.80, weight=8.1];
"30":"43":e -> "43":"30":w [/* label="0.05" */ x=1, color="#20202080", penwidth=3.60, weight=0.0];
"31":"30":e -> "30":"31":w [/* label="0.17" */ x=1, color="#20202080", penwidth=12.24, weight=0.3];
"32":"29":e -> "29":"32":w [/* label="0.5" */ x=1, color="#00006080", penwidth=36.00, weight=2.5];
"32":"33":e -> "33":"32":w [/* label="0.9" */ x=1, color="#ee760080", penwidth=64.80, weight=8.1];
"33":"26":e -> "26":"33":w [/* label="0.7" */ x=1, color="#ee760080", penwidth=50.40, weight=4.9];
"33":"29":e -> "29":"33":w [/* label="0.03" */ x=1, color="#00006080", penwidth=2.16, weight=0.0];
"42":"30":e -> "30":"42":w [/* label="1" */ x=1, color="#ee760080", penwidth=72.00, weight=10.0];
}