Skip to content

Sankey nodeAlign? #1938

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
dangerismycat opened this issue Aug 7, 2017 · 23 comments · Fixed by #6800
Closed

Sankey nodeAlign? #1938

dangerismycat opened this issue Aug 7, 2017 · 23 comments · Fixed by #6800
Labels
feature something new

Comments

@dangerismycat
Copy link

Curious if there are any plans to merge the more recent d3-sankey support for node alignment (from this commit, June 13 of this year) into your fork? It's a really useful feature that I'd love to be able to use with your great wrapper.

@etpinard
Copy link
Contributor

etpinard commented Aug 8, 2017

cc @monfera

@monfera
Copy link
Contributor

monfera commented Aug 8, 2017

@etpinard please tell me when to schedule it:

Some of our PRs to upstream d3-sankey were merged by Mike Bostock, so catching up makes sense for multiple reasons. One of our PRs predictably wasn't taken up, we'll need to reapply, likely not a lot of divergence yet. The alignment options should be exposed via plotly.js attributes in the JSON.

@monfera monfera self-assigned this Aug 8, 2017
@monfera monfera added the feature something new label Aug 8, 2017
@etpinard
Copy link
Contributor

etpinard commented Aug 8, 2017

please tell me when to schedule it:

Definitively not a high priority for now, unless @jackparmer thinks otherwise.

@jackparmer
Copy link
Contributor

Yeah, no customers on my radar who are asking about this. Probably shelve for now.

@phillyo
Copy link

phillyo commented Mar 16, 2018

would be great to have this option! when visualizing process flows, it makes no sense that the terminal nodes are all on the right of the viz (as for those which did not pass the whole process, they should not be on the same level as all the nodes which did).

@harisbal
Copy link

Would be a very welcome addition indeed :)
Not being able to control the position of nodes in the sankey diagram is unfortunately a big limitation to their use

@antoinerg
Copy link
Contributor

@harisbal How much control do you want to have over the position of the nodes. Would it be convenient if you could specify the x and y position of each node?

@harisbal
Copy link

@antoinerg controlling doesn't sound like a bad idea indeed. What I was thinking though is being able to control the number of "vertical" groups if that makes sense. For instance in the following example
sankey_nodes
I cannot place the "International aviation" node at the same vertical level as "Electricity grid" and "District heating" (in the picture I'm dragging it manually)
Ideally I would like to control how to group nodes (e.g. with a dictionary).
In the very nice implementation of ricklupton https://nbviewer.jupyter.org/github/ricklupton/ipysankeywidget/blob/master/examples/More%20examples.ipynb this is called rank sets
Thank you very much for checking on this.

@JeroenSchmidt
Copy link

@harisbal thank you for the link showing how to use ranksets. This is a really handy feature when one wants to order their sankey data according to a temporal layout - for example when plotting the evolution of communities that appear and disappear over time.

@harisbal
Copy link

@JeroenSchmidt that;s exactly the issue I'm facing, where I try to depict some temporal data (often disappearing between nodes).

@antoinerg
Copy link
Contributor

@JeroenSchmidt @harisbal Thank you for reminding me of the need for this worthwhile feature.

In the meantime, PR #3583 (set to be released in 1.46.0) allows one to manually control the position of nodes either via dragging or by setting attributes node.(x|y). I am investigating providing control over the number of colums and ordering within them.

@gabubellon
Copy link

I endorse how interesting this feature would be.
I have work with d3 / d3-sankey "vanilla" and had problems with depth that in Plotly were solved.
However having a nodeAlign implementation for time series would help a lot.
Mainly to align the roots (eith no target links) more effectively.

@evan-rash
Copy link

@antoinerg are there any updates on plans for specifying number of columns and ordering of nodes within those columns?

@ryankinsey1
Copy link

I'm interested in this as well. What I would like to be able to is have 'terminal nodes' in the middle (i.e. some data flows end in the middle while other's flow through to the end and/or break down into further subgroups.)

@piccinnigius
Copy link

piccinnigius commented Dec 1, 2019

@antoinerg any update or trick to implement this? i want to put the terminal nodes by levels (aligned to left instead to right)

this:
image

instead of this:
image

it's bad to show this kind of things in production...
oooooooor how can export the full sankey data with fixed positions?

thanks so much for help!

@antoinerg
Copy link
Contributor

This feature should not be hard to implement since it is supported in our dependencies. I started a branch a while ago https://github.com/plotly/plotly.js/compare/sankey2-node-align that shows what needs to be done. After resolving the conflicts, it might be good to go. I don't have the time to work on this at the moment but I can revisit later of help someone make a PR.

@tanvi-cota
Copy link

Do we have any update on this feature? Are we looking to work on this soon? This is a good feature, and already available in our dependency.

@nicolaskruchten
Copy link
Contributor

No one from the Plotly team is working on this at the moment but we’d be happy to accept a PR if someone wants to take Antoine’s work over the finish line :)

@tanvi-cota
Copy link

@nicolaskruchten I would love to contribute, let me see how can i get that updated.

@jackparmer
Copy link
Contributor

This issue has been tagged with NEEDS SPON$OR

A community PR for this feature would certainly be welcome, but our experience is deeper features like this are difficult to complete without the Plotly maintainers leading the effort.

Sponsorship range: $5k-$10k

What Sponsorship includes:

  • Completion of this feature to the Sponsor's satisfaction, in a manner coherent with the rest of the Plotly.js library and API
  • Tests for this feature
  • Long-term support (continued support of this feature in the latest version of Plotly.js)
  • Documentation at plotly.com/javascript
  • Possibility of integrating this feature with Plotly Graphing Libraries (Python, R, F#, Julia, MATLAB, etc)
  • Possibility of integrating this feature with Dash
  • Feature announcement on community.plotly.com with shout out to Sponsor (or can remain anonymous)
  • Gratification of advancing the world's most downloaded, interactive scientific graphing libraries (>50M downloads across supported languages)

Please include the link to this issue when contacting us to discuss.

@KaranTrivedi
Copy link

Bump on this issue? \

@ghost
Copy link

ghost commented Feb 22, 2024

Hi everyone, I saw an 'align' property was added in plotly v5.19.0 to solve this issue. Unfortunately I can't make it work. I can try any of the 4 values ['center', 'right', 'left', 'justify'], but nothing will change. I tried with the same example as in the plotly sankey tutorial. I have the latest plotly version v5.19.0

Thank you for your help
@adamreeve @archmoj

@bverem
Copy link

bverem commented Mar 2, 2024

Same, tutorial examples in v5.19.0 are ignoring node alignment values. x and y values for nodes appear to also be ignored (EDIT: It looks like if y=0, the values are ignored, but non-zero y works). Thank you for the help--love the Sankey option!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature something new
Projects
None yet
Development

Successfully merging a pull request may close this issue.