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


112

동일한 그래프에 여러 커널 밀도 추정치를 플로팅하려고하는데, 모두 다른 색상이되기를 원합니다. 문자열을 사용하고 '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

30
단순히 "모두 보류"를 시도 했습니까? 그러면 각각의 새로운 플롯 명령에 대한 뉴스 색상이 자동으로 그려집니다.
twerdster 2011

3
"hold all"은 실제 질문에 대한 답이 아니지만, 단순한 "hold on"이 모든 곡선을 파란색으로 그려주기 때문에 여기서 끝나는 많은 사람들에게 해결책이 될 수 있습니다. @twerdster에 많은 감사드립니다!
Rémi

8
현재 R2014b , 보통은 hold on입니다 기능적으로 동일hold all. 그러나 7 가지 기본 색상 이상을 얻는 방법에 대한 질문이 남아 있습니다. 사용될 수 아짐 또는 시각적으로 쉽게 구별을 위해 조정 색상을 생성하는 함수에 의해 기술 된 바와 같이 기본 컬러 맵은 용액 일 수있다 아래로 .
chappjc 2014 년

1
사용하면 hold all다른 색상의 플롯이 표시되는 반면 (매우 둔하게 보이지만)를 사용 hold on하면 모든 플롯이 파란색이됩니다. 그래서 기능적 동등성이 무엇인지 궁금합니다.
HelloGoodbye

4
@HelloGoodbye R2014b 이상에서는 hold on다양한 색상 플롯을 제공합니다. 및 이전 버전을 사용하고 있습니다. 에서 현재 문서 " hold all와 동일합니다 hold on. 참고 : .이 구문은 향후 릴리스에서 제거됩니다 사용 hold on대신에." 릴리스 정보를 참조하십시오 .
chappjc

답변:


131

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 설명서를.


찾고 있었다. @Azim 잘 지내십시오.
교수

후손을 위해 나는 hold all다른 색상 맵을 선택할 수있는 다양성으로 인해 @Mark Elliot의 솔루션 보다이 대답을 수락하기로 결정했습니다 .
Doresoom 2015 년

플롯 대신 "라인"플롯 명령을 사용하여 작동하도록하려면 어떻게해야합니까?
Pedro77 2011

106

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

MATLAB 사이트에서 hold:

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


36

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

  • '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))

2
참고로 Image Processing Toolbox가 필요한 것 같습니다.
Doresoom 2015 년

2
@Doresoom 정보 주셔서 감사합니다. 게시물을 업데이트했습니다.
chappjc 2015 년

12

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

기본 색상 순서 변경 참조

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

1
일회성 축의 경우 :set(gca,'ColorOrder',jet(5));
Evgeni Sergeev 2013 년

1
멋진 도구 상자가 필요없는 jet (number)에 대한 정보 만 제공하는 데 탁월합니다
crobar

4

모든 벡터의 크기가 같으면 행렬을 만들고 플로팅합니다. 각 열은 다른 색상으로 자동으로 표시됩니다. 그러면 legend열을 표시 하는 데 사용할 수 있습니다 .

data = randn(100, 5);

figure;
plot(data);

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

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

legend(names)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.