문제

나는 같은 그래프에서 여러 커널 밀도 추정치를 플로팅하려고 노력하고 있으며 모두 다른 색상이되기를 원합니다. 문자열을 사용하여 kludged 솔루션이 있습니다 'rgbcmyk' 그리고 각 별도의 플롯마다 그것을 밟지 만 7 번의 반복 후에 복제를 시작합니다. 더 쉽고 효율적인 방법이 있고 더 많은 색상 옵션이 있습니까?

for n=1:10
 source(n).data=normrnd(rand()*100,abs(rand()*50),100,1); %generate random data
end
cstring='rgbcmyk'; % color string
figure
hold on
for n=1:length(source)
 [f,x]=ksdensity(source(n).data); % calculate the distribution
 plot(x,f,cstring(mod(n,7)+1))  % plot with a different color each time
end
도움이 되었습니까?

해결책

HSV와 같은 컬러 맵을 사용하여 색상 세트를 생성 할 수 있습니다. 예를 들어:

cc=hsv(12);
figure; 
hold on;
for i=1:12
    plot([0 1],[0 i],'color',cc(i,:));
end

MATLAB에는 13 개의 다른 이름의 ColorMaps가 있습니다 ('Doc Colormap' 그들 모두를 나열합니다).

다른 색상의 선을 플로팅하는 또 다른 옵션은 라인 스타일 주문 재산; 보다 플로팅을위한 선의 색상 정의 자세한 내용은 Matlab 문서에서.

다른 팁

실제로, 색상을 순환하는 것입니다. hold all; 대신에 hold on;. 각각의 연속 plot MATLAB의 기본 컬러 맵을 통해 (자동으로) 회전합니다.

Matlab 사이트에서 hold:

hold all 후속 플로팅 명령이 ColorOrder 및 LinestyleOrder 속성 값을 목록의 시작으로 재설정하지 않도록 플롯 및 현재 줄 색상 및 라인 스타일을 보유합니다. 플로팅 명령은 목록에서 마지막 플롯이 중지 된 곳에서 사전 정의 된 색상과 선 스타일을 계속 순환합니다.

늦은 답변이지만 추가 할 두 가지 사항 :

  • 변경 방법에 대한 정보 'ColorOrder' 속성 및 글로벌 기본값을 설정하는 방법 'DefaultAxesColorOrder',이 게시물의 맨 아래에있는 "부록"을 참조하십시오.
  • MATLAB Central 파일 교환에 훌륭한 도구가 있습니다. 자세한 내용은 계속 읽으십시오.

그만큼 ColorOrder axes 재산 Matlab은 사용할 때 색상 목록을 자동으로 순환 할 수 있습니다. hold on/all (다시, 방법은 아래 부록을 참조하십시오 set/get 그만큼 ColorOrder 특정 축 또는 전 세계를 통해 DefaultAxesColorOrder). 그러나 기본적으로 Matlab은 짧은 색상 목록 만 지정합니다 (단지 7 R2013b 기준) 반면에 순환하고 더 많은 데이터 시리즈에 좋은 색상 세트를 찾는 것이 문제가 될 수 있습니다. 10 개의 음모의 경우 분명히 기본값에 의존 할 수 없습니다. ColorOrder.

좋은 방법 N 시각적으로 뚜렷한 색상을 정의하십시오 함께 있습니다 "MATLAB Central 파일 파일 exchange에"최대 지각 적으로 결정된 색상 생성 "(GMPDC) 제출. 그것은 저자 자신의 말로 가장 잘 설명됩니다.

이 함수는 "실험실"컬러 공간, RGB보다 인간의 색상 인식과 더 밀접하게 일치합니다. 가능한 색상의 초기 큰 목록이 주어지면, 이전에 선택된 모든 항목에서 가장 먼 (실험실 공간에서) 목록의 항목을 반복적으로 선택합니다.

예를 들어 25 가지 색상이 요청되면 다음과 같습니다.

25 "maximally perceptually-distinct colors"

GMPDC 제출은 MathWorks의 공식 블로그에서 금주의 선택 2010 년에는 부분적으로 임의의 색상을 요청할 수있는 능력 때문에 (Matlab의 7 개의 기본 색상과 달리). 그들은 심지어 Matlab 's를 설정하기 위해 훌륭한 제안을했습니다. ColorOrder 스타트 업에서

distinguishable_colors(20)

물론, 당신은 그것을 설정할 수 있습니다 ColorOrder 단일 축의 경우 또는 원하는 방식으로 사용할 색상 목록을 생성합니다. 예를 들어, 10 개의 "최대 지각 적으로 결정된 색상"을 생성하고 동일한 축에서 10 개의 플롯에 사용하려면 (그러나 사용하지 않습니다 ColorOrder, 따라서 루프가 필요합니다):

% Starting with X of size N-by-P-by-2, where P is number of plots
mpdc10 = distinguishable_colors(10) % 10x3 color list
hold on
for ii=1:size(X,2),
    plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end

프로세스가 단순화되고 필요하지 않습니다 for 루프 ColorOrder 축 속성:

% X of size N-by-P-by-2
mpdc10 = distinguishable_colors(10)
ha = axes; hold(ha,'on')
set(ha,'ColorOrder',mpdc10)    % --- 여기에 Colororder를 설정하십시오 ---
plot(X(:,:,1),X(:,:,2),'-.')   % 루프는 필요하지 않습니다. '색상'은 필요하지 않습니다. 예!

부록

얻기 위해 ColorOrder 현재 축에 사용되는 RGB 배열,

get(gca,'ColorOrder')

기본값을 얻으려면 ColorOrder 새로운 축,

get(0,'DefaultAxesColorOrder')

새로운 글로벌 설정의 예 ColorOrder MATLAB START에서 10 가지 색상이 있습니다 startup.m:

set(0,'DefaultAxesColorOrder',distinguishable_colors(10))

파티에 늦었습니다. 나는 이것을 직접 조사하고 있었고 Colororder라는이 축 옵션에 대해 방금 발견했거나 세션의 색상 순서를 지정하거나 그림만을 표시 한 다음 배열을 플로팅하고 Matlab이 지정된 색상을 자동으로 순환하도록합니다.

보다 기본 Colororder 변경

예시

set(0,'DefaultAxesColorOrder',jet(5))
A=rand(10,5);
plot(A);

모든 벡터의 크기가 동일한 경우 행렬을 만들어 플롯하십시오. 각 열은 자동으로 다른 색상으로 표시되면 사용할 수 있습니다. legend 열을 표시하려면 :

data = randn(100, 5);

figure;
plot(data);

legend(cellstr(num2str((1:size(data,2))')))

또는 커널 이름이있는 셀이있는 경우 사용하십시오.

legend(names)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top