get (X, Y) coordinates of a node in sankey plot
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 18.8k
- フォーク
- 2.8k
- 平均マージ
- 16時間 26分
- マージ済み PR(30日)
- 21
説明
Problem definition
I wrote an application that loads properties of a sankey plot from a file and displays it. I'd like to be able to manually (drag and drop) arrange node positions and then save their (X, Y) coordinates to a file to be able to continue the work later. For that I would need to get access to (X, Y) coordinates of nodes but I haven't found anything about that in the documentation and the source code.
Applied workaround
My current workaround is to read HTML source of generated plot and estimate (X, Y) coordinates based on parameters of translate functions defined for each node. However, this approach is inaccurate. Here's simplified code describing a single node:
<g class="sankey-node" transform="translate(13.260000228881836,401.4360046386719)">
<rect class="node-rect" height="185.32853214031275" width="20.000000000000004">
</rect>
...
</g>
The above node, in a python code, has X coordinate set to: 0.01 and Y coordinate set to 0.45. My current formulas to estimate python coordinates (X*, Y*) based on SVG translations (X, Y) are:
X* = (X - (node_width / 2)) / (plot_width - (margin_left + margin_right) - (padding_left + padding_right))
Y* = (Y - (node_height / 2)) / (plot_height - (margin_top + margin_bottom) - (padding_top + padding_bottom)) + node_height * 0.0009
Referring to the pasted SVG code and corresponding python coordinates the formulas would do the following:
X -> X* : 13.260000228881836 -> 0.01
Y -> Y* : 401.4360046386719 -> 0.45
I wrote that the above formulas are inaccurate because they:
[1] Reproduce python (X, Y) with some error.
[2] The error is affected by a plot size but it's not clear to me what is the relation. The error decreases with increasing plot size. When the plot is maximized on a 2560x1440 screen I get error less then 0.01 which is acceptable.
[3] In case of Y coordinate I had to add the node_height * 0.0009 component because the higher the node was the bigger the error was. I don't know where this number comes from but without it errors for high nodes were significantly bigger.
Questions
[1] Is there a better way read python (X, Y) coordinates of nodes?
[2] If there is no way to do it better could you tell if you plan to add a feature that would allow to access (X, Y) coordinates of nodes?
[3] Could you tell what are formulas used to transfrom python (X, Y) coordinates to parameters in the translate function used in the SVG code of a generated plot?
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
ファイル、テスト、エントリーポイントは指定されていません。まず plotly.py のソースコードとドキュメントで Sankey ノードの位置処理を追跡し、次に、サポートされる座標アクセサーまたは正確な変換動作を仕様として定められるかどうかを判断してください。ドラッグされたノードを対象とするカバレッジを含め、要求された座標または文書化された制限が確立されれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- data-visualization
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 35/100