2016-07-25 3 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

다른 해결책 :

plot([zeros(1,length(x));x],[zeros(1,length(x));y],'r-') 
+0

기능이 내장 된 매우 세련된 솔루션 – TyanTowers

2

플로팅 할 때 줄을 끊으려면 NaN을 사용할 수 있습니다. 따라서 xy 값을 동일한 길이의 NaN 벡터와 연결 한 다음 reshape 벡터를 연결하여 NaN을 사용하여 개별 세그먼트 사이에서 줄을 끊을 수 있습니다.

코드를 보편적으로 적용하기 위해 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-'); 
관련 문제