2016-07-25 22 views
3

MATLABに未接続線をたくさんプロットする必要があります。このコードは、forループを使用して行います:MATLABで多くの未接続線をプロットする

x = 1:5; 
y = 10:-2:2; 
figure; 
hold on; 
for ii = 1:5 
    plot([0,x(ii)],[0,y(ii)],'b-'); 
end 

forループを使用せずに同じことを行うことはできますか?

ユースケース:私は木を視覚化しようとしていますし、描画される多くの行があります。私はすべての行の終点を事前に計算し、plotまたは同等のものを一度呼び出すことを望みます。これは私がscatterを使ってツリーのノードを表示することです。

答えて

1

もう1つの解決策:

組み込み機能を持つ
plot([zeros(1,length(x));x],[zeros(1,length(x));y],'r-') 
+0

非常にエレガントなソリューション – TyanTowers

2

あなたはプロットするときの線を切断するNaNを利用することができます。したがって、あなたは、個々のセグメントの間で回線を切断するNaNを持つために、それを同じ長さのNaN - ベクトルであなたのxy値を連結し、その後reshapeことができます。

コードを普遍的に適用できるように、xoyoを原点の座標とします。次のように今、プロットされるポイントが計算できます。

xp = reshape([ones(size(x))*xo;x;NaN(size(x))],1,[]); 
yp = reshape([ones(size(y))*yo;y;NaN(size(y))],1,[]); 

xp - ベクトルは次のようになります。

 
0 1 NaN 0 2 NaN 0 3 NaN 0 4 NaN 0 5 NaN 
└ origin   └ end point of segment 2   └ to disconnect lines 

あなたと同じ結果を生成するために、全体のコードは、質問は次のとおりです。

x = 1:5; 
y = 10:-2:2; 

figure; 
xo = 0;  % x-coordinate of origin 
yo = 0;  % y-coordinate of origin 
xp = reshape([ones(size(x))*xo;x;NaN(size(x))],1,[]); 
yp = reshape([ones(size(y))*yo;y;NaN(size(y))],1,[]); 
plot(xp,yp,'b-'); 
関連する問題