2017-06-22 13 views
0

Octaveで有向非循環グラフツリーを視覚化したいと思います。Octaveで有向非循環グラフを表示する

MATLABでは、これはbiograph()を使用して行われます。オクターブ相当物はありますか?

また、Octaveの使用方法を教えてください。drawgraph()? (geometryパッケージから)

drawGraph

答えて

1

受け入れ:

  • 各行は単一のノード
  • 各行が表す「エッジ」行列を表す座標の集合である「ノード」マトリックス、ノードが「ノード」行列内の対応する行から数値的に識別される2つのノード間のエッジ。

例:

pkg load geometry; 

Nodes = [ 0, -1; 
      1, 0; 
      0, 1; 
     -1, 0]; 

Edges = [1, 2; 
     2, 3; 
     3, 4; 
     1, 3; 
     2, 4]; 

g = drawGraph(Nodes, Edges); 
set(g, 'markerfacecolor', 'g', 'markersize', 50, 'linewidth', 5); 

しかし、これは文字通りマーカーとラインのちょうどコレクションです。シンプルなループで簡単なlineplotコマンド(矢印が必要な場合はquiver)を使用して、これを簡単に複製できます。それは私の問題を助け

Nodes(1) = struct('coords', [0, -1], 'shape', 'o', 'text', 'Node 1', 'facecolor', 'k', 'edgecolor', 'r', 'textcolor', 'g', 'size', 75); 
Nodes(2) = struct('coords', [1, 0], 'shape', 'd', 'text', 'Node 2', 'facecolor', 'r', 'edgecolor', 'g', 'textcolor', 'b', 'size', 100); 
Nodes(3) = struct('coords', [0, 1], 'shape', 's', 'text', 'Node 3', 'facecolor', 'g', 'edgecolor', 'b', 'textcolor', 'k', 'size', 75); 
Nodes(4) = struct('coords', [-1, 0], 'shape', 'p', 'text', 'Node 4', 'facecolor', 'b', 'edgecolor', 'k', 'textcolor', 'r', 'size', 150); 

NodesLayer = axes(); 
hold on; 
for i = Nodes 
    Node = plot(i.coords(1), i.coords(2)); 
    set (Node, 'marker', i.shape, 'markerfacecolor', i.facecolor, 'markeredgecolor', i.edgecolor', 'markersize', i.size, 'linewidth', 5); 
end 
hold off; axis off; 
set(NodesLayer, 'xlim', [-1.5, 1.5], 'ylim', [-1.5, 1.5]); 

TextLayer = axes('color', 'none'); 
for i = Nodes 
    Text = text (i.coords(1)-0.16, i.coords(2), i.text); 
    set (Text, 'color', i.textcolor, 'fontsize', 12, 'fontweight', 'bold'); 
end 
hold off; axis off; 
set(TextLayer, 'xlim', [-1.5, 1.5], 'ylim', [-1.5, 1.5]); 

Edges = [1,2; 2,3; 3,4; 4,1; 2,1; 4,3; 1,3; 3,1]; 

EdgesLayer = axes('color', 'none') 
hold on; 
for E = Edges.' 
    i = E(1); j = E(2); 
    u = [Nodes(j).coords(1) - Nodes(i).coords(1)]; 
    v = [Nodes(j).coords(2) - Nodes(i).coords(2)]; 
    x = Nodes(i).coords(1) + u * 0.25; 
    y = Nodes(i).coords(2) + v * 0.25; 
    Q = quiver(x, y, u * 0.5, v * 0.5, 0.1); 
    set (Q, 'linewidth', 3, 'color', 'k'); 
end 
hold off; axis off; 
set (EdgesLayer, 'xlim', [-1.5, 1.5], 'ylim', [-1.5, 1.5]); 

+0

:あなたはなど、異なる形状、色、テキスト、

ここでは、マニュアルの例だと、ノードをしたい場合、これは好ましいかもしれません。しかし、私はmatriksからグラフを見て変更したい。ノードYとしての列、ノードXとしての行、エッジの重みとしての行列の値。 たとえば、 matlabにgrafを表示したい matriks K = [0 3 4; 0 0 2; 0 0 0; in matlab K = [0 3 4; 0 0 2; 0 0 0]; ビュー(伝記(K、[]、 'ShowArrows'、 'off'、 'ShowWeights'、 'on')) はmatlabで動作しますが、オクターブでは動作しません。私はこの問題を解決するために何をしなければならない – Dafri

関連する問題