Comments (32)
@cpettitt are you planning to add cluster support anytime soon ?
from dagre.
Currently investigating this using a few different sources:
- Sander, "Layout of Compound Directed Graphs"
- Forster, "Applying Crossing Reduction Strategies to Layered Compound Graphs"
- Forster, "A Fast and Simple Heuristic for Constrained Two-Level Crossing Reduction"
from dagre.
Is there currently support for a subgraph feature?
Thanks
from dagre.
@aaronkrolik, not yet, unfortunately.
from dagre.
I noticed dig.js had support for subgraphs. Would it be difficult to implement that feature in dagre? I am willing to work on an implementation with a little instruction.
from dagre.
Any work on this? Any possibility of support for subgraphs soon?
from dagre.
+1
from dagre.
+1
from dagre.
+1 for me too! :) This stalled for quite some time due to lack of time on my part, but I have had time over the last week to make some progress on this. There's still a fair amount of work to do, but at least this is getting attention now.
from dagre.
Progress update:
- We can describe clusters with the subgraph feature of graphlib's CGraph and CDigraph.
- I just added support for constrained ordering (#84).
Remaining work: graph preprocessing, graph post-processing, and renderer changes.
from dagre.
Even though I am not I understand the progress in detail, but just to check: will we be able to do stuff like in this link when this issue is closed?
http://www.graphviz.org/Gallery/directed/cluster.html
from dagre.
Yes, the goal of this ticket is to be able to group a subgraph in a rectangular area separate from nodes not in the subgraph. Edges can cross subgraph boundaries.
from dagre.
Do you have some informations about the progress of clustering feature?
from dagre.
We have a first pass at clustering on the cluster3 branch. There are a number of edge cases and bugs that need to be addressed before this makes it to master. I've opened tickets and tagged them with "cluster" if they support this goal. Feel free to give the branch a try and if you find issues not already reported in the ticket system, please add them. Also if you're using it and it is working OK for your case that would also be helpful feedback. Thanks!
from dagre.
Just curious if work is continuing on cluster3 — I'd love to have containment, but there are features implemented in the main branch now that I can't live without.
from dagre.
Hi coopermj,
I've been crazy busy again, so I haven't had time to work on it. I'd be happy to help somebody get the clustering branch caught up to master and to address some of the remaining issues on the clustering branch, but I don't have a lot of time to drive it forward myself right now.
from dagre.
+1
It would be awesome if we have this feature.
from dagre.
I was going to open a new Issue - but will hijack this one instead! Firstly I want to thank you for the subgraph/cluster support that is there (once I worked out it even exists!).
Now to the issue (minor) - the subgraph boxes seem to be too wide in certain situations:
from dagre.
And a more extreme example (I think the subgraph is expanding to include some of edge control points?
from dagre.
@GordonSmith that is a known issue and one of the reasons I'm keeping this ticket open. It's actually not a difficult problem to fix; I just need some time to do it. I hope to get it over the upcoming holiday break.
A little more context in case someone wants to take a stab at it before I get to it:
The bk positioner (lib/position/bk.js
) minimizes horizontal space for the graph by shifting blocks of nodes horizontally such that they are close to other nodes while still respecting minimum separation. The positioner doesn't know anything about cluster border nodes, so does not treat them optimally. Instead of keeping them tight to the container clusters nodes, the borders will sometimes expand to the nearest neighbor. I'd like to do another pass to "shrinkwrap" border nodes around their cluster nodes.
from dagre.
If the correct solution is to just calculate the bounds of the contents and add a margin (as a final step) then I might try and have a look at it (I have an ideal spot to do that in my wrapper layers, but that wouldn't be appropriate here...) - BTW very kewl that it is working as well as it is (I am replacing an old ActiveX/NPAPI control which wrapped GraphViz and rendered in c++ - but with chrome dropping NPAPI support this seems to be by far the best option)!!!
Also if anyone is interested, the above "widget" is part of an open source visualization framework I am cobbling together (http://rawgit.com/hpcc-systems/Visualization/master/demos/test.html).
from dagre.
81c5a27 should fix the issue of having lots of open space in the clusters. I tried it on a few cases, but please give it a go with yours and let me know how it goes. For the moment you'll need to build dagre to try it out - I can paste a version with the fix if that is easier.
This change does not address the wide cluster borders due to edge control points. I need to think about that one a little more. In many cases you want the control points in the cluster, but as in your example above there are exceptions to that guideline!
from dagre.
Why would you want edge control points within a cluster (the only reason I can think of is when the source and target both exist within that cluster)?
Your "fix" seems to be backwards - IOW it seems to use the extra space to spread out the nodes, rather than contracting the cluster?
from dagre.
@GordonSmith you also want the control points in the cluster because it keeps the edges straight when they pass through the upper or lower boundary of the cluster. If you force them outside of the cluster then all edges immediately go outside the cluster on the left or right side and then come back in the same way, versus going straight down as they do now. I'm not sure the explanation is clear - if it would help, I could switch it and show you what it looks like.
Regarding the latest version, yes that looks like a step backwards. It would be super helpful if you could get me one of the graphs with a problem in a DOT or JSON format for me to play with.
from dagre.
@cpettitt This is from your graphlib.json.write function:
{
"options": {
"directed": true,
"multigraph": true,
"compound": true
},
"nodes": [
{
"v": "_w478",
"value": "Projected\nCsv Read\n'...::POSITWEETS'",
"parent": "_w949"
},
{
"v": "_w481",
"value": "Projected\nCsv Read\n'...::NEGATWEETS'",
"parent": "_w949"
},
{
"v": "_w484",
"value": "Funnel",
"parent": "_w949"
},
{
"v": "_w487",
"value": "Count Project",
"parent": "_w949"
},
{
"v": "_w490",
"value": "Spill",
"parent": "_w949"
},
{
"v": "_w493",
"value": "Project",
"parent": "_w949"
},
{
"v": "_w496",
"value": "Normalize",
"parent": "_w949"
},
{
"v": "_w499",
"value": "Spill",
"parent": "_w949"
},
{
"v": "_w502",
"value": "Sort",
"parent": "_w949"
},
{
"v": "_w505",
"value": "Group",
"parent": "_w949"
},
{
"v": "_w508",
"value": "Grouped Aggregate",
"parent": "_w949"
},
{
"v": "_w511",
"value": "Group",
"parent": "_w949"
},
{
"v": "_w514",
"value": "Grouped Aggregate",
"parent": "_w949"
},
{
"v": "_w517",
"value": "Spill",
"parent": "_w949"
},
{
"v": "_w520",
"value": "Count",
"parent": "_w949"
},
{
"v": "_w523",
"value": "Store\nInternal('a1')",
"parent": "_w949"
},
{
"v": "_w526",
"value": "Disk Read\nSpill",
"parent": "_w950"
},
{
"v": "_w529",
"value": "Sort",
"parent": "_w950"
},
{
"v": "_w532",
"value": "Count Project",
"parent": "_w950"
},
{
"v": "_w535",
"value": "Disk Write\nSpill File",
"parent": "_w950"
},
{
"v": "_w538",
"value": "Disk Read\nSpill",
"parent": "_w951"
},
{
"v": "_w541",
"value": "Disk Read\nSpill",
"parent": "_w951"
},
{
"v": "_w544",
"value": "Lookup Join",
"parent": "_w951"
},
{
"v": "_w547",
"value": "Disk Read\nSpill",
"parent": "_w951"
},
{
"v": "_w550",
"value": "Sort",
"parent": "_w951"
},
{
"v": "_w553",
"value": "Group",
"parent": "_w951"
},
{
"v": "_w556",
"value": "Disk Read\nSpill",
"parent": "_w951"
},
{
"v": "_w559",
"value": "Sort",
"parent": "_w951"
},
{
"v": "_w562",
"value": "Group",
"parent": "_w951"
},
{
"v": "_w565",
"value": "Join",
"parent": "_w951"
},
{
"v": "_w568",
"value": "If",
"parent": "_w951"
},
{
"v": "_w571",
"value": "Sort",
"parent": "_w951"
},
{
"v": "_w574",
"value": "Group",
"parent": "_w951"
},
{
"v": "_w577",
"value": "Grouped Aggregate",
"parent": "_w951"
},
{
"v": "_w580",
"value": "Project",
"parent": "_w951"
},
{
"v": "_w583",
"value": "Group",
"parent": "_w951"
},
{
"v": "_w586",
"value": "Projected\nDisk Read\nSpill",
"parent": "_w951"
},
{
"v": "_w589",
"value": "Spill",
"parent": "_w951"
},
{
"v": "_w592",
"value": "Sort",
"parent": "_w951"
},
{
"v": "_w595",
"value": "Group",
"parent": "_w951"
},
{
"v": "_w598",
"value": "Join",
"parent": "_w951"
},
{
"v": "_w601",
"value": "Hash Aggregate",
"parent": "_w951"
},
{
"v": "_w604",
"value": "Disk Write\nSpill File",
"parent": "_w951"
},
{
"v": "_w607",
"value": "Disk Grouped Aggregate\nSpill",
"parent": "_w952"
},
{
"v": "_w610",
"value": "Disk Grouped Aggregate\nSpill",
"parent": "_w952"
},
{
"v": "_w613",
"value": "Spill",
"parent": "_w952"
},
{
"v": "_w616",
"value": "All Join",
"parent": "_w952"
},
{
"v": "_w619",
"value": "Projected\nDisk Read\nSpill",
"parent": "_w952"
},
{
"v": "_w622",
"value": "Lookup Join",
"parent": "_w952"
},
{
"v": "_w625",
"value": "Disk Write\nSpill File",
"parent": "_w952"
},
{
"v": "_w628",
"value": "Disk Read\nSpill",
"parent": "_w953"
},
{
"v": "_w631",
"value": "Disk Grouped Aggregate\nSpill",
"parent": "_w953"
},
{
"v": "_w634",
"value": "Lookup Join",
"parent": "_w953"
},
{
"v": "_w637",
"value": "Projected\nDisk Read\nSpill",
"parent": "_w953"
},
{
"v": "_w640",
"value": "Projected\nDisk Read\nSpill",
"parent": "_w953"
},
{
"v": "_w643",
"value": "Group",
"parent": "_w953"
},
{
"v": "_w646",
"value": "Grouped Aggregate",
"parent": "_w953"
},
{
"v": "_w649",
"value": "All Join",
"parent": "_w953"
},
{
"v": "_w652",
"value": "Funnel",
"parent": "_w953"
},
{
"v": "_w655",
"value": "Count Project",
"parent": "_w953"
},
{
"v": "_w658",
"value": "Normalize",
"parent": "_w953"
},
{
"v": "_w661",
"value": "Disk Write\n'~SENTILYZE::TRAINER::BAYESMODEL__p436057190'",
"parent": "_w953"
},
{
"v": "_w948",
"value": "_w948"
},
{
"v": "_w949",
"value": "_w949",
"parent": "_w948"
},
{
"v": "_w950",
"value": "_w950",
"parent": "_w948"
},
{
"v": "_w951",
"value": "_w951",
"parent": "_w948"
},
{
"v": "_w952",
"value": "_w952",
"parent": "_w948"
},
{
"v": "_w953",
"value": "_w953",
"parent": "_w948"
}
],
"edges": [
{
"v": "_w478",
"w": "_w484",
"value": "_w664"
},
{
"v": "_w481",
"w": "_w484",
"value": "_w668"
},
{
"v": "_w484",
"w": "_w487",
"value": "_w672"
},
{
"v": "_w487",
"w": "_w490",
"value": "_w676"
},
{
"v": "_w490",
"w": "_w493",
"value": "_w680"
},
{
"v": "_w493",
"w": "_w496",
"value": "_w684"
},
{
"v": "_w496",
"w": "_w499",
"value": "_w688"
},
{
"v": "_w499",
"w": "_w502",
"value": "_w692"
},
{
"v": "_w502",
"w": "_w505",
"value": "_w696"
},
{
"v": "_w505",
"w": "_w508",
"value": "_w700"
},
{
"v": "_w508",
"w": "_w511",
"value": "_w704"
},
{
"v": "_w511",
"w": "_w514",
"value": "_w708"
},
{
"v": "_w514",
"w": "_w517",
"value": "_w712"
},
{
"v": "_w517",
"w": "_w520",
"value": "_w716"
},
{
"v": "_w520",
"w": "_w523",
"value": "_w720"
},
{
"v": "_w526",
"w": "_w529",
"value": "_w724"
},
{
"v": "_w529",
"w": "_w532",
"value": "_w728"
},
{
"v": "_w532",
"w": "_w535",
"value": "_w732"
},
{
"v": "_w538",
"w": "_w544",
"value": "_w736"
},
{
"v": "_w541",
"w": "_w544",
"value": "_w740"
},
{
"v": "_w547",
"w": "_w550",
"value": "_w744"
},
{
"v": "_w550",
"w": "_w553",
"value": "_w748"
},
{
"v": "_w556",
"w": "_w559",
"value": "_w752"
},
{
"v": "_w559",
"w": "_w562",
"value": "_w756"
},
{
"v": "_w553",
"w": "_w565",
"value": "_w760"
},
{
"v": "_w562",
"w": "_w565",
"value": "_w764"
},
{
"v": "_w544",
"w": "_w568",
"value": "_w768"
},
{
"v": "_w565",
"w": "_w568",
"value": "_w772"
},
{
"v": "_w568",
"w": "_w571",
"value": "_w776"
},
{
"v": "_w571",
"w": "_w574",
"value": "_w780"
},
{
"v": "_w574",
"w": "_w577",
"value": "_w784"
},
{
"v": "_w577",
"w": "_w580",
"value": "_w788"
},
{
"v": "_w580",
"w": "_w583",
"value": "_w792"
},
{
"v": "_w586",
"w": "_w589",
"value": "_w796"
},
{
"v": "_w589",
"w": "_w592",
"value": "_w800"
},
{
"v": "_w592",
"w": "_w595",
"value": "_w804"
},
{
"v": "_w583",
"w": "_w598",
"value": "_w808"
},
{
"v": "_w595",
"w": "_w598",
"value": "_w812"
},
{
"v": "_w598",
"w": "_w601",
"value": "_w816"
},
{
"v": "_w601",
"w": "_w604",
"value": "_w820"
},
{
"v": "_w610",
"w": "_w613",
"value": "_w824"
},
{
"v": "_w607",
"w": "_w616",
"value": "_w828"
},
{
"v": "_w613",
"w": "_w616",
"value": "_w832"
},
{
"v": "_w616",
"w": "_w622",
"value": "_w836"
},
{
"v": "_w619",
"w": "_w622",
"value": "_w840"
},
{
"v": "_w622",
"w": "_w625",
"value": "_w844"
},
{
"v": "_w628",
"w": "_w634",
"value": "_w848"
},
{
"v": "_w631",
"w": "_w634",
"value": "_w852"
},
{
"v": "_w640",
"w": "_w643",
"value": "_w856"
},
{
"v": "_w643",
"w": "_w646",
"value": "_w860"
},
{
"v": "_w637",
"w": "_w649",
"value": "_w864"
},
{
"v": "_w646",
"w": "_w649",
"value": "_w868"
},
{
"v": "_w634",
"w": "_w652",
"value": "_w872"
},
{
"v": "_w649",
"w": "_w652",
"value": "_w876"
},
{
"v": "_w652",
"w": "_w655",
"value": "_w880"
},
{
"v": "_w655",
"w": "_w658",
"value": "_w884"
},
{
"v": "_w658",
"w": "_w661",
"value": "_w888"
},
{
"v": "_w517",
"w": "_w526",
"value": "_w892"
},
{
"v": "_w499",
"w": "_w538",
"value": "_w896"
},
{
"v": "_w535",
"w": "_w541",
"value": "_w900"
},
{
"v": "_w499",
"w": "_w547",
"value": "_w904"
},
{
"v": "_w535",
"w": "_w556",
"value": "_w908"
},
{
"v": "_w523",
"w": "_w568",
"value": "_w912"
},
{
"v": "_w490",
"w": "_w586",
"value": "_w916"
},
{
"v": "_w604",
"w": "_w607",
"value": "_w920"
},
{
"v": "_w589",
"w": "_w610",
"value": "_w924"
},
{
"v": "_w604",
"w": "_w619",
"value": "_w928"
},
{
"v": "_w625",
"w": "_w628",
"value": "_w932"
},
{
"v": "_w625",
"w": "_w631",
"value": "_w936"
},
{
"v": "_w613",
"w": "_w637",
"value": "_w940"
},
{
"v": "_w613",
"w": "_w640",
"value": "_w944"
}
]
}
from dagre.
{
"options": {
"directed": true,
"multigraph": true,
"compound": true
},
"nodes": [
{
"v": "_w1417",
"value": "Disk Count\n'...::VOCABULARY__p2621957508'",
"parent": "_w1871"
},
{
"v": "_w1420",
"value": "Store\nInternal('a2')",
"parent": "_w1871"
},
{
"v": "_w1423",
"value": "Projected\nDisk Read\n'...::BAYESMODEL__p436057190'",
"parent": "_w1872"
},
{
"v": "_w1426",
"value": "Sort",
"parent": "_w1872"
},
{
"v": "_w1429",
"value": "Group",
"parent": "_w1872"
},
{
"v": "_w1432",
"value": "Grouped Aggregate",
"parent": "_w1872"
},
{
"v": "_w1435",
"value": "Project",
"parent": "_w1872"
},
{
"v": "_w1438",
"value": "Group",
"parent": "_w1872"
},
{
"v": "_w1441",
"value": "Projected\nDisk Read\n'...::BAYESMODEL__p436057190'",
"parent": "_w1872"
},
{
"v": "_w1444",
"value": "Sort",
"parent": "_w1872"
},
{
"v": "_w1447",
"value": "Group",
"parent": "_w1872"
},
{
"v": "_w1450",
"value": "Denormalize",
"parent": "_w1872"
},
{
"v": "_w1453",
"value": "Project",
"parent": "_w1872"
},
{
"v": "_w1456",
"value": "Disk Write\nSpill File",
"parent": "_w1872"
},
{
"v": "_w1459",
"value": "Read\nSTORED('t')",
"parent": "_w1873"
},
{
"v": "_w1462",
"value": "Project",
"parent": "_w1873"
},
{
"v": "_w1465",
"value": "Normalize",
"parent": "_w1873"
},
{
"v": "_w1468",
"value": "Disk Write\nSpill File",
"parent": "_w1873"
},
{
"v": "_w1471",
"value": "Disk Read\nSpill",
"parent": "_w1874"
},
{
"v": "_w1474",
"value": "Projected\nDisk Read\n'...::VOCABULARY__p2621957508'",
"parent": "_w1874"
},
{
"v": "_w1477",
"value": "Lookup Join",
"parent": "_w1874"
},
{
"v": "_w1480",
"value": "Disk Read\nSpill",
"parent": "_w1874"
},
{
"v": "_w1483",
"value": "Sort",
"parent": "_w1874"
},
{
"v": "_w1486",
"value": "Group",
"parent": "_w1874"
},
{
"v": "_w1489",
"value": "Projected\nDisk Read\n'...::VOCABULARY__p2621957508'",
"parent": "_w1874"
},
{
"v": "_w1492",
"value": "Sort",
"parent": "_w1874"
},
{
"v": "_w1495",
"value": "Group",
"parent": "_w1874"
},
{
"v": "_w1498",
"value": "Join",
"parent": "_w1874"
},
{
"v": "_w1501",
"value": "If",
"parent": "_w1874"
},
{
"v": "_w1504",
"value": "Sort",
"parent": "_w1874"
},
{
"v": "_w1507",
"value": "Group",
"parent": "_w1874"
},
{
"v": "_w1510",
"value": "Grouped Aggregate",
"parent": "_w1874"
},
{
"v": "_w1513",
"value": "Project",
"parent": "_w1874"
},
{
"v": "_w1516",
"value": "Disk Write\nSpill File",
"parent": "_w1874"
},
{
"v": "_w1519",
"value": "Disk Read\nSpill",
"parent": "_w1875"
},
{
"v": "_w1522",
"value": "Projected\nDisk Read\nSpill",
"parent": "_w1875"
},
{
"v": "_w1525",
"value": "Lookup Join",
"parent": "_w1875"
},
{
"v": "_w1528",
"value": "Sort",
"parent": "_w1875"
},
{
"v": "_w1531",
"value": "Group",
"parent": "_w1875"
},
{
"v": "_w1534",
"value": "Grouped Aggregate",
"parent": "_w1875"
},
{
"v": "_w1537",
"value": "Projected\nDisk Read\nSpill",
"parent": "_w1875"
},
{
"v": "_w1540",
"value": "Sort",
"parent": "_w1875"
},
{
"v": "_w1543",
"value": "Group",
"parent": "_w1875"
},
{
"v": "_w1546",
"value": "Grouped Aggregate",
"parent": "_w1875"
},
{
"v": "_w1549",
"value": "Lookup Join",
"parent": "_w1875"
},
{
"v": "_w1552",
"value": "Filtered\nProjected\nDisk Read\nSpill",
"parent": "_w1875"
},
{
"v": "_w1555",
"value": "Lookup Join",
"parent": "_w1875"
},
{
"v": "_w1558",
"value": "Sort",
"parent": "_w1875"
},
{
"v": "_w1561",
"value": "Dedup",
"parent": "_w1875"
},
{
"v": "_w1564",
"value": "Project",
"parent": "_w1875"
},
{
"v": "_w1567",
"value": "Rollup",
"parent": "_w1875"
},
{
"v": "_w1570",
"value": "Spill",
"parent": "_w1875"
},
{
"v": "_w1573",
"value": "Filtered Project",
"parent": "_w1875"
},
{
"v": "_w1576",
"value": "Output\nInternal('a3')",
"parent": "_w1875"
},
{
"v": "_w1579",
"value": "Filtered\nProjected\nDisk Read\nSpill",
"parent": "_w1876"
},
{
"v": "_w1582",
"value": "Output\nInternal('a4')",
"parent": "_w1876"
},
{
"v": "_w1585",
"value": "Read\nSTORED('t')",
"parent": "_w1877"
},
{
"v": "_w1588",
"value": "Filtered Project",
"parent": "_w1877"
},
{
"v": "_w1591",
"value": "Read\nSTORED('t')",
"parent": "_w1877"
},
{
"v": "_w1594",
"value": "Filtered Project",
"parent": "_w1877"
},
{
"v": "_w1597",
"value": "Funnel",
"parent": "_w1877"
},
{
"v": "_w1600",
"value": "Firstn",
"parent": "_w1877"
},
{
"v": "_w1603",
"value": "Output\nResult #1",
"parent": "_w1877"
},
{
"v": "_w1870",
"value": "_w1870"
},
{
"v": "_w1871",
"value": "_w1871",
"parent": "_w1870"
},
{
"v": "_w1872",
"value": "_w1872",
"parent": "_w1870"
},
{
"v": "_w1873",
"value": "_w1873",
"parent": "_w1870"
},
{
"v": "_w1874",
"value": "_w1874",
"parent": "_w1870"
},
{
"v": "_w1875",
"value": "_w1875",
"parent": "_w1870"
},
{
"v": "_w1876",
"value": "_w1876",
"parent": "_w1870"
},
{
"v": "_w1877",
"value": "_w1877",
"parent": "_w1870"
}
],
"edges": [
{
"v": "_w1417",
"w": "_w1420",
"value": "_w1606"
},
{
"v": "_w1423",
"w": "_w1426",
"value": "_w1610"
},
{
"v": "_w1426",
"w": "_w1429",
"value": "_w1614"
},
{
"v": "_w1429",
"w": "_w1432",
"value": "_w1618"
},
{
"v": "_w1432",
"w": "_w1435",
"value": "_w1622"
},
{
"v": "_w1435",
"w": "_w1438",
"value": "_w1626"
},
{
"v": "_w1441",
"w": "_w1444",
"value": "_w1630"
},
{
"v": "_w1444",
"w": "_w1447",
"value": "_w1634"
},
{
"v": "_w1438",
"w": "_w1450",
"value": "_w1638"
},
{
"v": "_w1447",
"w": "_w1450",
"value": "_w1642"
},
{
"v": "_w1450",
"w": "_w1453",
"value": "_w1646"
},
{
"v": "_w1453",
"w": "_w1456",
"value": "_w1650"
},
{
"v": "_w1459",
"w": "_w1462",
"value": "_w1654"
},
{
"v": "_w1462",
"w": "_w1465",
"value": "_w1658"
},
{
"v": "_w1465",
"w": "_w1468",
"value": "_w1662"
},
{
"v": "_w1471",
"w": "_w1477",
"value": "_w1666"
},
{
"v": "_w1474",
"w": "_w1477",
"value": "_w1670"
},
{
"v": "_w1480",
"w": "_w1483",
"value": "_w1674"
},
{
"v": "_w1483",
"w": "_w1486",
"value": "_w1678"
},
{
"v": "_w1489",
"w": "_w1492",
"value": "_w1682"
},
{
"v": "_w1492",
"w": "_w1495",
"value": "_w1686"
},
{
"v": "_w1486",
"w": "_w1498",
"value": "_w1690"
},
{
"v": "_w1495",
"w": "_w1498",
"value": "_w1694"
},
{
"v": "_w1477",
"w": "_w1501",
"value": "_w1698"
},
{
"v": "_w1498",
"w": "_w1501",
"value": "_w1702"
},
{
"v": "_w1501",
"w": "_w1504",
"value": "_w1706"
},
{
"v": "_w1504",
"w": "_w1507",
"value": "_w1710"
},
{
"v": "_w1507",
"w": "_w1510",
"value": "_w1714"
},
{
"v": "_w1510",
"w": "_w1513",
"value": "_w1718"
},
{
"v": "_w1513",
"w": "_w1516",
"value": "_w1722"
},
{
"v": "_w1519",
"w": "_w1525",
"value": "_w1726"
},
{
"v": "_w1522",
"w": "_w1525",
"value": "_w1730"
},
{
"v": "_w1525",
"w": "_w1528",
"value": "_w1734"
},
{
"v": "_w1528",
"w": "_w1531",
"value": "_w1738"
},
{
"v": "_w1531",
"w": "_w1534",
"value": "_w1742"
},
{
"v": "_w1537",
"w": "_w1540",
"value": "_w1746"
},
{
"v": "_w1540",
"w": "_w1543",
"value": "_w1750"
},
{
"v": "_w1543",
"w": "_w1546",
"value": "_w1754"
},
{
"v": "_w1534",
"w": "_w1549",
"value": "_w1758"
},
{
"v": "_w1546",
"w": "_w1549",
"value": "_w1762"
},
{
"v": "_w1549",
"w": "_w1555",
"value": "_w1766"
},
{
"v": "_w1552",
"w": "_w1555",
"value": "_w1770"
},
{
"v": "_w1555",
"w": "_w1558",
"value": "_w1774"
},
{
"v": "_w1558",
"w": "_w1561",
"value": "_w1778"
},
{
"v": "_w1561",
"w": "_w1564",
"value": "_w1782"
},
{
"v": "_w1564",
"w": "_w1567",
"value": "_w1786"
},
{
"v": "_w1567",
"w": "_w1570",
"value": "_w1790"
},
{
"v": "_w1570",
"w": "_w1573",
"value": "_w1794"
},
{
"v": "_w1573",
"w": "_w1576",
"value": "_w1798"
},
{
"v": "_w1579",
"w": "_w1582",
"value": "_w1802"
},
{
"v": "_w1585",
"w": "_w1588",
"value": "_w1806"
},
{
"v": "_w1591",
"w": "_w1594",
"value": "_w1810"
},
{
"v": "_w1588",
"w": "_w1597",
"value": "_w1814"
},
{
"v": "_w1594",
"w": "_w1597",
"value": "_w1818"
},
{
"v": "_w1597",
"w": "_w1600",
"value": "_w1822"
},
{
"v": "_w1600",
"w": "_w1603",
"value": "_w1826"
},
{
"v": "_w1468",
"w": "_w1471",
"value": "_w1830"
},
{
"v": "_w1468",
"w": "_w1480",
"value": "_w1834"
},
{
"v": "_w1420",
"w": "_w1501",
"value": "_w1838"
},
{
"v": "_w1516",
"w": "_w1519",
"value": "_w1842"
},
{
"v": "_w1456",
"w": "_w1522",
"value": "_w1846"
},
{
"v": "_w1516",
"w": "_w1537",
"value": "_w1850"
},
{
"v": "_w1456",
"w": "_w1552",
"value": "_w1854"
},
{
"v": "_w1570",
"w": "_w1579",
"value": "_w1858"
},
{
"v": "_w1576",
"w": "_w1588",
"value": "_w1862"
},
{
"v": "_w1582",
"w": "_w1594",
"value": "_w1866"
}
]
}
from dagre.
+1
from dagre.
@cpettitt hello, any news about clustering support and linking graphs and subgraphs ?
from dagre.
Hello! I'm very interested in cluster support and noticed this ticket for Dagre D3: https://dagrejs.github.io/project/dagre-d3/latest/demo/clusters.html
Does the same functionality exist in Dagre? I'm not using Dagre D3 for rendering.
from dagre.
Yes, dagre-d3 is using dagre to do the actual layout.
from dagre.
+1
from dagre.
Is there any way to add padding or margin to the clusters?
from dagre.
Related Issues (20)
- Accessibility: allow for usage of rem or px in height and width
- Consider using webgpu rewriting?
- Dagre not able to draw my graph without 2 edges crossing HOT 2
- Why do these edges cause errors?
- Maintaining custom node order in dagre layout HOT 6
- Child nodes after layout cannot be aligned horizontally
- Unable to setParent from a child to parent which is a group of nodes HOT 2
- TypeError: reduce of empty array with no initial value HOT 3
- Vertical positioning: Nodes overlapping HOT 2
- Port to ESM w/ commonjs back-conversion HOT 1
- How to make use of `Graph<T>` / `Node<T>` types? HOT 1
- Node version 14 HOT 1
- Nodes do not have the height and width even after nodes are Initialized.
- Align UP and LEFT not working as expected HOT 1
- ERROR in ./node_modules/@dagrejs/graphlib/lib/graph.js 18:2 Module parse failed: Unexpected character '#' (18:2) HOT 4
- Edges don't render when nodes are farther away HOT 4
- Switch to ESM reverted, why? HOT 2
- layout align problems
- Nested nodes too far apart
- Want keepNodeOrder option like dagrejs
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dagre.