[matlab] 다양한 색상의 선을 자동으로 플롯

동일한 그래프에 여러 커널 밀도 추정치를 플로팅하려고하는데, 모두 다른 색상이되기를 원합니다. 문자열을 사용하고 '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 개의 서로 다른 명명 된 컬러 맵이 있습니다 ( ‘doc colormap’ 에는 모두 나열 됨).

다른 색으로 선을 그리는 또 다른 옵션은 LineStyleOrder 속성 을 사용하는 것입니다 . 참조 플로팅 라인의 색상 정의 자세한 내용은 MATLAB 설명서를.


답변

실제로 색상을 순환시키는 적절한 지름길 방법 hold all;hold on;. 각각의 연속 plot은 MATLAB의 기본 컬러 맵을 통해 자동으로 회전합니다.

MATLAB 사이트에서 hold:

hold all후속 플로팅 명령이 ColorOrder 및 LineStyleOrder 속성 값을 목록의 처음으로 재설정하지 않도록 플롯과 현재 선 색상 및 선 스타일을 유지합니다. 플로팅 명령은 목록에서 마지막 플롯이 중지 된 위치부터 미리 정의 된 색상과 선 스타일을 계속 순환합니다.


답변

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

  • 'ColorOrder'속성 을 변경하는 방법과로 전역 기본값을 설정하는 방법 에 대한 자세한 내용 'DefaultAxesColorOrder'은이 게시물 하단의 “부록”을 참조하십시오.
  • MATLAB Central File Exchange에는 Image Processing Toolbox가있는 경우 시각적으로 구별되는 여러 색상을 생성 할 수있는 훌륭한 도구가 있습니다. 자세한 내용은 계속 읽으십시오.

ColorOrder axes재산권 사용할 경우 색의리스트를 자동으로 순환 MATLAB 수 있도록 hold on/all(다시, 방법은 아래의 부록 참조 set/ 특정 축 또는 전체적으로 통해 ). 그러나 기본적으로 MATLAB 은 순환 할 짧은 색상 목록 ( R2013b 기준 7 개만) 만 지정하며 , 반면에 더 많은 데이터 계열에 적합한 색상 세트를 찾는 것은 문제가 될 수 있습니다. 10 개의 플롯의 경우 기본값에 의존 할 수 없습니다 .getColorOrderDefaultAxesColorOrderColorOrder

수있는 좋은 방법 N 시각적으로 구분 색상을 정의는 함께 다양한 MATLAB 중앙 파일 파일 교환의 “극대 지각 – 고유 색상을 생성”(GMPDC) 제출 . 저자 자신의 말로 가장 잘 설명됩니다.

이 기능 은 RGB보다 인간의 색상 인식에 더 가깝게 일치 하는 “Lab”색상 공간 을 참조하여 구별 할 수있는 색상 세트를 생성합니다 . 가능한 색상의 초기 큰 목록이 주어지면 이전에 선택한 모든 항목에서 가장 먼 목록의 항목 (실험실 공간에서)을 반복적으로 선택합니다.

예를 들어 25 가지 색상이 요청되는 경우 :

25 "최대로 지각 가능한 색상"

GMPDC 제출은 MathWorks의 공식 블로그 에서 2010 년 Pick of the Week로 선정 되었습니다. 부분적으로는 임의의 수의 색상을 요청할 수있는 기능 때문입니다 (MATLAB의 기본 색상 7 개와 달리). 그들은 ColorOrder시작시 MATLAB을 다음과 같이 설정하라는 훌륭한 제안을 했습니다.

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

이 프로세스는 축 속성을 사용하여 루프가 필요하지 않고forColorOrder 단순화 됩니다 .

크기 NxPx2의 % X
mpdc10 = 구분 가능한 _ 색상 (10)
ha = 축; 홀드 (ha, 'on')
set (ha, 'ColorOrder', mpdc10) % --- 여기에 ColorOrder 설정 ---
plot (X (:, :, 1), X (:, :, 2), '-.') % 루프가 필요하지 않음, '색상'이 필요하지 않습니다. 예이!

부록

ColorOrder현재 축에 사용되는 RGB 배열 을 얻으려면

get(gca,'ColorOrder')

ColorOrder새 축의 기본값을 얻으려면

get(0,'DefaultAxesColorOrder')

다음 ColorOrder에서 MATLAB 시작시 10 색으로 새 전역을 설정하는 예 startup.m:

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


답변

파티에 늦었 어. 직접 조사한 결과 ColorOrder라는이 축 옵션에 대해 방금 발견했습니다. 세션 또는 Figure에 대한 색상 순서를 지정한 다음 배열을 플로팅하고 MATLAB이 지정된 색상을 자동으로 순환하도록 할 수 있습니다.

기본 색상 순서 변경 참조

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)


답변