2013-04-12 2 views
0

저는 아직 Matlab에 익숙해 져 있고 플로팅에 약간의 문제가 있습니다. 각 행에 점 목록이 들어있는 셀이 있습니다. 동일한 그래프에서 각 행의 색상을 다른 색상으로 플롯하여 비교할 수 있습니다. 이 캐치는 알 수없는 점과 행 (즉, 프로그램을 실행할 때마다 점과 행의 수를 변경할 수 있음)에 대해이 작업을 수행해야한다는 것입니다.Matlab에서 점의 행을 그려야합니다.

그래서 예를 들어, 내 셀 어레이 A를 가질 수있다 :

A = {[0,0], [1,2], [3,4]; [0,0] [5,6], [9,2]}

및 그 색인에 대해 행 1에 점을 플롯하려는 경우 (3D 그래프) 행 2에 점이 있습니다. 다른 색깔의 같은 그래프. 행은 항상 같은 길이입니다. (각 행은 항상 같은 수의 점을가집니다). 몇 가지 다른 루프를 시도했지만이 권리를 얻을 수없는 것 같습니다.

올바른 방향으로 나를 보내 주시면 큰 도움이 될 것입니다!

답변

0

당신은 그냥 매트릭스로 변환하고 직접 그릴 수 :

% Some dummy data - format a little different from your example 
% to allow for different numbers of elements per row 
A = {[0,0, 1,2, 3,4]; [0,0, 5,6]}; 

% Figure out how many columns we need in total 
maxLen = max(cellfun(@length, A)); 
% Preallocate 
Amat = NaN(size(A, 1), maxLen); 
% Copy data 
for n = 1:size(A, 1) 
    curA = A{n}; 
    Amat(n, 1:length(curA)) = curA; 
end 

% Generate 1:N vector repeated the correct number of times (rows) 
x = repmat(1:size(Amat, 2), size(Amat, 1), 1); 
plot(x, Amat) 

편집 : 당신은 당신의 게시물에 어떤 시점에서 3 차원 그래프를 언급했다. 위는 3 차원 그래프를 그릴 수 없습니다, 그래서 여기 뭔가 그 것이다 :

% Generate Amat as above 

% Then: 
[X, Y] = meshgrid(1:size(Amat, 1), 1:size(Amat, 2)); 
surf(X, Y, Amat.'); % OR: plot3(X, Y, Amat.'); 

나는 이것이 당신이 원하는 것을 정확히 모르겠지만 귀하의 질문에 당신이 밖으로 원하는 그래프의 정확히 어떤 종류에 약간 불분명하다 이의. 플롯에서 색이있는 선만 사용하려는 경우 surf 대신 plot3을 사용할 수 있지만 IMHO surf을 사용하면 이러한 종류의 데이터를 명확하게 나타낼 수 있습니다.

0

각 반복마다 포인트와 행의 수가 변경 될 수 있다는 사실 때문에 많은 문제가 발생하지 않습니다. 플롯 루프 (크기 (A, 1) 및 크기 (A, 2)) 전에 크기 함수를 사용하여 행렬의 크기를 가져 오는 것이 좋습니다.

행렬의 크기를 확인한 후에 치수를 반복하고 holdon을 사용하여 동일한 플롯에 선을 그리고 마지막으로 선의 색을 반복하면서 치수의 함수로 만들어 항상 그래야합니다.

+0

그래서 I 순간에있는 코드가 다른 선 색 (all_robot_locations 셀 어레이 임) D 용 = (1 행) H = 1 : COLS X2 = all_robot_locations {행, H} (1); y2 = all_robot_locations {row, h} (2); z2 = h; x = [x, x2]; y = [y, y2]; z = [z, z2]; 단부 plot3 (X, Y, Z) 단부 문제 I 그것을 삭제하고, 외부 루프의 각 반복에 대한 X, Y, Z 값을 재실행 할 것입니다 (d = 1 : 열) 따라서 셀 배열의 행을 반복 할 때마다 이러면 안돼. 내가 잘못한 방식으로 반복하는지 아닌지 모르겠다. – user1782742

관련 문제