2016-10-30 2 views
0

내 목표는 동일한 그림에 2 가지 주요 기능을 플롯하는 것이지만 원래의 2 가지 기능이 어떻게 전개되는지와 관련된 유사한 기능의 맨 위에 플롯 할 수도 있습니다. 예를 들어, 첫 번째 기능은 빨간색과 단색으로, 이후의 유사한 기능은 동일한 색상이지만 다른 선 스타일을 통해 순환합니다. 두 번째 기능은 모두 파란색으로 표시되지만 선 스타일을 따라 순환합니다. 다음은 몇 가지 샘플 코드입니다 :동일한 색상을 유지하면서 옥타브에서 선 스타일을 순환시키는 방법은 무엇입니까?

lstyle = {" '-' ", " '--' ", " ':' ", " '-.' "}; 
i=1; 

%Plot: 
for n=1:3 
    choose_lstyle = lstyle{i}; 
    y1 = (z.*n).^2; 
    y2 = (z.*n).^3; 
    plot(z,y1,'r','linestyle',choose_lstyle); 
    plot(z,y2,'b','linestyle',choose_lstyle); 
    n++; 
    if i < length(lstyle) %cycle through line styles 
    i = i+1; 
    else 
    i = 1; 
    end 
    hold on; 
end 

'-'또는 ':'따옴표를 넣으려고하고 있으며, choose_lstyle이 어디에 있든 괜찮습니다. 기본적으로 선 스타일을 순환하려고하는 것을 제외하고 따옴표로 묶인 선 스타일이 하나 뿐인 경우와 정확히 같습니다. 여기, 당신이 몇 가지 실수를했다

error: set: invalid value for radio property "linestyle" (value = '-') 
error: called from 
__line__ at line 120 column 16 
line at line 56 column 8 
__plt__>__plt2vv__ at line 500 column 10 
__plt__>__plt2__ at line 246 column 14 
__plt__ at line 113 column 17 
plot at line 220 column 10 
PROGRAM_NAME at line 37 column 3 
enter code here 
+2

이렇게 말하면 잘못된 인수를 전달할 수 있습니다. ''lstyle = { '-', '-', ':', '-.'}' – stephematician

+0

@StephenWade 나는 이것이 배열 (또는 그렇게? 그러나'lstyle = [ '-'; '-'; ':'; '-'; '-']'와'choose_lstyle = strtrim (lstyle (i, :))' – 0range

+1

이 작동합니다 나를 위해. '{} '대신'()'를 사용하여 lstyle에 색인을 생성하면 셀 배열을 반환합니다. – stephematician

답변

1

작업 코드 :

이 실행할 때 내가 오류는

lstyle = {'-','--',':','-.'}; 
z = 1:100; 

%Plot: 
k = 1; 
for n = 1:10 
    y1 = (z.*n).^2; 
    y2 = (z.*n).^2.1; % I changed it from 3 so you can see the red lines 
    plot(z,y1,'r',z,y2,'b','linestyle',lstyle{k}); 
    if k < length(lstyle) %cycle through line styles 
     k = k+1; 
    else 
     k = 1; 
    end 
    hold on; 
end 

line_style

어떤 요청 주시기 바랍니다 코멘트에 불분명 한 부분.


이 코드는 당신에게 유사한 결과를 얻을 수 있지만, 더 작고 효율적 :

lstyle = {'-','--',':','-.'}; 
z = 1:10; 
by = bsxfun(@times,z.',1:10).^2; 
ry = bsxfun(@times,z.',1:10).^2.1; 
p = plot(z,ry,'r',z,by,'b'); 
k = 1; 
for n = 1:numel(p) 
    p(n).LineStyle = lstyle{k}; 
    k = k+1; 
    if k > numel(lstyle) 
     k = 1; 
    end 
end 

MATLAB의 개봉 버전은 erlier 후 2014, 또는 당신은 단지 소형 코드를 보면

lstyle = {'-','--',':','-.'}; 
z = 1:10; 
by = bsxfun(@times,z.',1:10).^2; 
br = bsxfun(@times,z.',1:10).^2.1; 
p = plot(z,br,'r',z,by,'b'); 
lineStyles = repmat(lstyle,1,ceil(numel(p)/numel(lstyle))); 
set(p,{'LineStyle'},lineStyles(1:numel(p)).'); 
+0

고마워. :). 이것은 나를 위해 거의 작동합니다. 아마도 Octave 4.0.0 (내가 사용하고있는 것)은 닷 스타일의 '.'코딩 스타일을 지원하지 않습니다. – magnetar

+0

하지만 첫 번째 코드 블록이 작동하므로 고맙습니다. – magnetar

+0

@magnetar 두 번째 부분은 2014 년 이전의 MATLAB 버전에서도 작동하지 않습니다. – EBH