1
這裏節點高度一致就是我獲得通過使用MATLAB的treeplot功能(這是示例圖像):MATLAB的treeplot:從頂部
這是我想獲得什麼:
正如你可以看到,我想有根據從根的距離的每個節點的位置。那可能嗎?
這裏節點高度一致就是我獲得通過使用MATLAB的treeplot功能(這是示例圖像):MATLAB的treeplot:從頂部
這是我想獲得什麼:
正如你可以看到,我想有根據從根的距離的每個節點的位置。那可能嗎?
我還在Matlab中尋找「根對齊」的樹形圖,發現沒有解決方案。以下是我想出了,萬一有人仍然需要它(我使用的是相同的例子如Matlab documentation):
nodes = [0 1 2 2 4 4 4 1 8 8 10 10];
首先,我們需要得到x和y座標在原樹情節的每一個節點,並找到所有的樹葉在它:
[x,y] = treelayout(nodes);
leaves = find(y == min(y));
接下來,我們重構每個鏈樹情節和它(存儲在一個矩陣通過這樣做,我們以後可以改變的y位置節點):
num_layers = 1/min(y)-1;
chains = zeros(num_layers, length(leaves));
for l=1:length(leaves)
index = leaves(l);
chain = [];
chain(1) = index;
parent_index = nodes(index);
j = 2;
while (parent_index ~= 0)
chain(j) = parent_index;
parent_index = nodes(parent_index);
j = j+1;
end
chains(:,l) = padarray(flip(chain), [0, num_layers-length(chain)], 'post');
end
現在我們計算由矩陣的行索引和依賴層的樹的數量確定的新y座標:
y_new = zeros(size(y));
for i=1:length(nodes)
[r,c] = find(chains==i, 1);
y_new(i) = max(y) - (r-1)*1/(num_layers+1);
end
現在,我們可以畫出重新定位節點,並添加連接線:
plot(x, y_new, 'o');
hold on
for c=1:size(chains, 2)
line_x = x(chains(chains(:,c)>0, c));
line_y = y_new(chains(chains(:,c)>0, c));
line(line_x, line_y);
end
如果你願意,你也可以在節點標籤添加到情節:
for t=1:length(nodes)
text(x(t)+0.025, y_new(t), num2str(t));
end
xlim([0 1]);
ylim([0 1]);
你究竟想要什麼?沒有標籤的情節?或者每個節點的'[x,y]'位置? – hbaderts
我想要所有與根等距的節點位於同一水平線上。正如我寫的,標籤不相關。 – Paul