Comments (3)
+1
I'm interested in a solution to this problem as well. I've found some ideas here, but haven't found a no concrete solution yet.
from d3-sankey.
I came with a solution that I'm still working on, but it is a specific to the problem you have.
The idea is to change the "class" attribute to all nodes, so you can manually change its position.
For example:
- Links class:
.attr("class", function(d) { return "link " + d.source.name + " " + d.target.name; })
- Nodes class:
.attr("class", function(d) { return "node " + d.name; })
Now you can change the position on the .css.
PS: I'm really new to html, css and js programming (less than 4 months). If this is not recommended I'll be pleased to know.
from d3-sankey.
This library performs relaxation in passes of alternating directions, from right-to-left and then left-to-right. When relaxing from left-to-right, it moves each node’s following nodes (the targets of the node’s source links) towards the node’s center; for example, it tries to center B around the center of A. Likewise when relaxing from right-to-left, it moves each node’s preceding nodes (the sources of the node’s target links) towards the node’s center; for example, it tries to center B around the weighted average centers of C, G and D.
In this example, the primary problem is the left-to-right pass, where it moves the center of B up towards the center of A. (There’s a similar but lesser problem moving the center of B up towards the center of C as part of the right-to-left pass, but it’s mitigated because the weighted average center of C, G and D is used.)
A better heuristic would probably try to contain B within the span of A on the left-to-right pass (and similarly for the right-to-left pass), but simply changing to that heuristic instead of the move-to-center heuristic does not work well because it greatly increases the overlap between links. Currently, there is no penalty when a link passes through a node, such as the link from B to G that passes through C.
Fixing this problem in general requires a more thorough redesign of how the layout is optimized. It might also require the insertion of dummy nodes, so that when a link spans more than one topological layer (such as B→G), it can be routed through a dummy node to avoid overlap with other nodes in the intermediate layers (such as B→dummy→G, where the dummy then avoids collision with C).
So, the short summary of this issue is “the generated layout could be better” and the answer is “yes, but it’s hard”, and I may get around to working on it sometime in the future but I don’t have a concrete plan for doing so in the short term, and so I’m going to close this issue. However, contributions for better layout heuristics and algorithms are welcome!
from d3-sankey.
Related Issues (20)
- Support to apply styles to node title HOT 2
- D3 Sankey customization HOT 1
- nodeAlign not aligning the nodes properly HOT 1
- Y coordinates of links control points calculates with error
- Unwanted circle on link path HOT 1
- Distribute or normalize nodes to fill available space
- Documentation image screenshots look strange with github's dark mode
- Uncaught RangeError: Invalid array length computeNodeBreadths
- Reconsider adding maintainers HOT 1
- Is it possible to sort source or target nodes in one column?
- Little to no activity on this plugin HOT 2
- Issues With Zero Values
- Issues with 0 values
- Empty links with a single node does not seem to work
- what algorithm the sankey uses to arrange the node positions
- Unwanted overlap of multiple/parallel links with sankeyLinkHorizontal
- sankey with mouseover links not working with d3@6 HOT 1
- Different Link Width at Source and Target HOT 3
- sourceLinks `y0` and `y1` calculated the wrong way round HOT 1
- Setting min height of node to avoid overlap issue HOT 2
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 d3-sankey.