동일한 그래프에 여러 커널 밀도 추정치를 플로팅하려고하는데, 모두 다른 색상이되기를 원합니다. 문자열을 사용하고 '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 개의 플롯의 경우 기본값에 의존 할 수 없습니다 .get
ColorOrder
DefaultAxesColorOrder
ColorOrder
수있는 좋은 방법 N 시각적으로 구분 색상을 정의는 함께 다양한 MATLAB 중앙 파일 파일 교환의 “극대 지각 – 고유 색상을 생성”(GMPDC) 제출 . 저자 자신의 말로 가장 잘 설명됩니다.
이 기능 은 RGB보다 인간의 색상 인식에 더 가깝게 일치 하는 “Lab”색상 공간 을 참조하여 구별 할 수있는 색상 세트를 생성합니다 . 가능한 색상의 초기 큰 목록이 주어지면 이전에 선택한 모든 항목에서 가장 먼 목록의 항목 (실험실 공간에서)을 반복적으로 선택합니다.
예를 들어 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
이 프로세스는 축 속성을 사용하여 루프가 필요하지 않고for
ColorOrder
단순화 됩니다 .
크기 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)
답변
