web-dev-qa-db-ja.com

networkxで矢印タイプを変更する

Pythonでnetworkxを使用して有向グラフをプロットしています。ところが、エッジのアローヘッドは先のとがった矢印ではなく、一端から太いことがわかりました。太いエッジを先のとがった矢印に変更したい。これが私のコード、実際の出力、そして望ましい出力です:

import networkx as nx
import matplotlib.pyplot as plt

G=nx.DiGraph()

item = [1,2]

G.add_Edge(*item) #color = item[-1], weight = 2)

pos = nx.circular_layout(G)    
nx.draw(G, pos, with_labels = True, Edge_color = 'b')   
plt.show()

出力 enter image description here

必要な出力: enter image description here

何か提案は本当に役に立ちますか?

8
user2293224

これは遅い答えかもしれませんが、新しいバージョンのnetworkx 2.1では、arrowstylearrowsizeを使用して矢印の種類を設定できますパラメータ。

import networkx as nx
import matplotlib.pyplot as plt

G=nx.DiGraph()

item = [1,2]

G.add_Edge(*item) #color = item[-1], weight = 2)

pos = nx.circular_layout(G)    
nx.draw(G, pos, with_labels = True, Edge_color = 'b', arrowsize=20, arrowstyle='fancy')   
plt.show()

詳細については、ドキュメントにアクセスしてください: https://networkx.github.io/documentation/stable/reference/generated/networkx.drawing.nx_pylab.draw_networkx_edges.html#networkx.drawing.nx_pylab.draw_networkx_edges ==

4
pilo

良いニュースです。これは、networkxの開発バージョン(networkx-2.1になる予定)で可能になりました。これで、コードに矢印が描画されます

In [5]: import networkx as nx
   ...: import matplotlib.pyplot as plt
   ...: 
   ...: G=nx.DiGraph()
   ...: 
   ...: item = [1,2]
   ...: 
   ...: G.add_Edge(*item) #color = item[-1], weight = 2)
   ...: 
   ...: pos = nx.circular_layout(G)    
   ...: nx.draw(G, pos, with_labels = True, Edge_color = 'b')   
   ...: plt.show()
   ...: 

enter image description here

3
Aric

今のところ、これはnx.drawでは不可能です。 https://github.com/networkx/networkx/blob/master/networkx/drawing/nx_pylab.py#L584 によると、まだ実装されていません。

ただし、graphvizを使用してグラフをプロットすることはできます。 Networkxには、グラフをgraphvizオブジェクトに簡単に変換するためのインターフェースがあります。 https://networkx.github.io/documentation/stable/reference/drawing.html#module-networkx.drawing.nx_agraph を参照してください。

2
Haochen Wu