問題タブ [pygraphviz]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
7448 参照

graph - Graphviz / PyGraphviz の有向グラフの NetworkX スタイルのスプリング モデル レイアウト

NetworkX は主にグラフ分析用であり、PyGraphviz は主に描画用であり、それらは連携して動作するように設計されています。ただし、NetworkX のグラフ描画 (MatPlotLib 経由) が PyGraphviz のグラフ描画 (Graphviz 経由) よりも優れている点が少なくとも 1 つあります。つまり、NetworkX には有向グラフ専用のスプリング レイアウト アルゴリズム (spring_layout関数経由でアクセス可能) があり、PyGraphviz にはいくつかのスプリングがあります。neato無向グラフであるかのように有向グラフをレイアウトするレイアウト アルゴリズム (プログラムなどからアクセス可能)。グラフの方向を実際に処理する唯一の Graphviz / PyGraphviz レイアウト プログラムは ですがdotdot強制的に方向付けされたレイアウトではなく、階層レイアウトを作成します。

有向グラフのスプリング レイアウトに関する NetworkX と PyGraphviz の違いを示す例を次に示します。

1_networkx_directed.png:( http://farm9.staticflickr.com/8516/8521343506_0c5d62e013.jpg )

2_networkx_undirected.png:( http://farm9.staticflickr.com/8246/8521343490_06ba1ec8e7.jpg )

3_pygraphviz_directed.png:( http://farm9.staticflickr.com/8365/8520231171_ef7784d983.jpg )

4_pygraphviz_undirected.png:( http://farm9.staticflickr.com/8093/8520231231_80c7eab443.jpg )

3 番目と 4 番目に描かれた図は、矢印が異なるだけで基本的に同じです (図全体が回転していますが、それ以外は違いはありません)。ただし、1 番目と 2 番目の図のレイアウトは異なります。これは、NetworkX のレイアウト アルゴリズムがランダム性の要素を導入しているためだけではありません。

上記のコードを繰り返し実行すると、これが偶然の出来事ではないことがわかります。NetworkX のspring_layout関数は明らかに、あるノードから別のノードへのアークがある場合、2 番目のノードは最初のノードよりもグラフの中心に近くなければならないという前提で書かれています (つまり、 で説明されているグラフedgelistが方向付けられている場合、ノード 2 はノード 1 と 3 よりもノード 9 に近く、ノード 6 はノード 4 よりもノード 9 に近く、ノード 8 はノード 7 よりもノード 9 に近くなければなりません。これは、ノードからわかるように、常に完全に機能するとは限りません。上の最初の図では 4 と 5 ですが、2 と 9 の両方を中心に近づけることに比べれば小さな問題であり、私の観点からの「エラー」は非常にわずかです)。言い換えれば、NetworkXspring_layoutは階層的であり、強制的に管理されています。

有向グラフでコア/周辺構造がより明確になるため、これは優れた機能です (作業している仮定によっては、入ってくるアークのないノードは、数が多くても周辺の一部と見なすことができます)。出アークの)。@skyebend は、ほとんどのレイアウト アルゴリズムが有向グラフを無向であるかのように扱う理由を以下で説明していますが、上記のグラフは、(a) NetworkX が有向グラフを異なる方法で処理し、(b) 分析に役立つ原理に基づいた方法で処理していることを示しています。

これは PyGraphviz / Graphviz を使用して複製できますか?

残念ながら、NetworkX の(実際には) 関数のドキュメントとコメント付きのソース コードでは、なぜ NetworkX がその結果を生成するのかについての手がかりが得られません。spring_layoutfruchterman_reingold_layout

これは PyGraphviz を使用して NetworkXspring_layout関数を使用してネットワークを描画した結果です (この質問に対する私自身の回答を以下で参照してください)。5_pygraphviz_plus_networkx.png: ( http://farm9.staticflickr.com/8378/8520231183_e7dfe21ab4.jpg )

0 投票する
1 に答える
43151 参照

graphviz - ドット形式のGraphVizで出力サイズを設定するには?

レイアウト後、すべてのノードが一定の範囲内 ([0,0,W,H] など) にあることを確認したいと思います。

bb属性を使用して境界ボックスが解決策になると考えましたが、ドットネイトの両方が単にそれを上書きします。

たとえば、私のグラフ:

の出力neato -Gbb="0,0,50,50" -T dot file.txt:

bbと の任意の値または任意の組み合わせに対して同じ位置を取得しsizeますdpi

私が必要とするのは、特定のボックス内にすべてのノードを配置することです。

これを行う方法について何か提案はありますか?

全文:

グラフをレイアウトするために、networkxの*graphviz_layout* を使用しています。pyprocessingでグラフを描画します。*graphviz_layout* からの結果の再スケーリングを避けたいのですが、代わりに自分の境界を正しく伝える方法がある場合。

0 投票する
1 に答える
4980 参照

python - pygraphviz ValueError:プログラムドットがパスに見つかりません

問題は次のとおりです。私はWindows7を使用しており、pygraphvizライブラリとGraphvizアプリケーションをインストールしました(Graphvizアプリケーションは「C:\ ProgramFiles」にあります)。Pythonでプログラムを実行すると、次のメッセージが表示されます。

どうすればこの問題を解決できますか?

0 投票する
1 に答える
1136 参照

django - Django 1.5 グラフ拡張 -x オプションは無視されました

コマンドを使用django-extensionsして、Django プロジェクト (Django バージョン 1.5) のデータベース構造を視覚化するために使用しますpython manage.py graph_models my_model -x user -o output.png

残念ながら、Django 1.5 にアップグレードした後、graph_models はオプションを無視します-x。このオプションを使用して、モデルをグラフから除外できます。

Django アプリのほぼすべてのuserモデルにモデルがあるため、グラフからユーザーを除外することが重要です。そうしないと、グラフがいっぱいになりすぎて読みにくくなります。

それを回避する方法についての提案に感謝します。

0 投票する
3 に答える
3602 参照

python - Draw more information on graph\nodes using PyGraphviz

I want to create a graph and draw it, so far so good, but the problem is that i want to draw more information on each node. I saw i can save attributes to nodes\edges, but how do i draw the attributes? i'm using PyGraphviz witch uses Graphviz.

0 投票する
1 に答える
3600 参照

graphviz - pygraphviz/dot の networkx のラッパー内で同じランクのノードをプログラムで指定する

次のコードを変更して、Child_4 を Grandchild_0 と同じ水平レベルに配置する (それにより、Grandchild_4 を独自のレベルにプッシュする) ことは可能ですか?

上記のコードは次のレイアウトを生成します。これを変更して、子を 1 レベル下に移動して孫と水平に揃えます。 img は、ルート ノード、5 つの子、および各子の下に 1 つの孫を示しています。


Python ネットワーク ライブラリ networkx 内で、graphviz のドット エンジンを使用してツリーをレンダリングしています (この推奨事項に従っています)。どのノードを同じ高さにするかを指定して、ノードの y 位置を制御したいと思います。ノードは、ツリー内の異なる深さにある場合があります。

コマンドを使用して独自のgraphvizコードを記述した場合、ノードの高さを制御できることはわかっていますrank=same(例:{rank=same; n4 -> p2;}[])。ただし、私は networkx.graphviz_layout() [ doc |に依存しています。source ] を使用してノードの位置を生成し、graphviz_layout はコマンド ライン引数のみを pygraphviz に送信できます。のバリアントを使用しようとしてnx.graphviz_layout(G, prog='dot', args="-Grank=same; n4 -> p2;")失敗しました。 pygraphviz の NetworkX ラッパー内で目的のノードの高さを記述することは可能ですか、それとも pygraphviz の周りに独自のラッパーを作成する必要がありますか? 編集:答えは、pygraphviz の新しいラッパーを提供します。pygraphviz の既存の NetworkX ラッパー内でランク情報を送信すると、物事が大幅に簡素化されます。誰かがそれがどのように可能かを教えてくれれば、受け入れられた答えを変更します。

0 投票する
1 に答える
8637 参照

python - PyGraphvizを使用して無向グラフのエッジに重みを追加して表示する方法は?

図にも表示されるエッジに重みを追加したいと思います。

0 投票する
1 に答える
1281 参照

python - PyGraphViz agraph.layout() が I0 エラーをスローする

次の Python コードを実行した後:

IDLE でこのトレースを取得しました。

助けてください、私はコースプロジェクトに取り組んでいます。情報: Graphviz が正しくインストールされました

0 投票する
7 に答える
60792 参照

python - Pythonはpygraphvizを認識しません

easy_installを使用してpygraphvizをインストールしましたが、Pythonを起動するとエラーが発生します:

Ubuntu12.04とgnome-terminalを使用します。

0 投票する
2 に答える
3601 参照

python-2.7 - PyGraphvizで複製ノードを作成するには?

PyGraphviz を使用して二分探索木を描画しています。エッジがノードに循環されるため、PyGraphviz を使用して複製ノードを作成できません。

たとえば、次のコードは 5 つのノードのみを生成し、重複するノードを除外します。各ノードに一意のインデックスを付けようとしましたが、問題は解決しません。

重複ノードがありません

BSTに描画する私のコード:

BST

上の図からわかるように、重複ノードが作成されていないため、エッジは循環しています。これを達成する方法を教えてください。図の四角いボックスは空のノードを表します。