Resposta tardia, mas duas coisas a acrescentar:
- Para obter informações sobre como alterar a
'ColorOrder'
propriedade e como definir um padrão global com 'DefaultAxesColorOrder'
, consulte o "Apêndice" na parte inferior desta postagem.
- Há uma ótima ferramenta no MATLAB Central File Exchange para gerar qualquer número de cores visualmente distintas, se você tiver a Caixa de ferramentas de processamento de imagem para usá-la. Leia mais detalhes.
A ColorOrder
axes
propriedade permite MATLAB para alternar automaticamente através de uma lista de cores ao usar hold on/all
(novamente, consulte o Apêndice abaixo como set
/ get
o ColorOrder
para um eixo específico ou globalmente via DefaultAxesColorOrder
). No entanto, por padrão, o MATLAB especifica apenas uma pequena lista de cores ( apenas 7 em R2013b) para percorrer e, por outro lado, pode ser problemático encontrar um bom conjunto de cores para mais séries de dados. Para 10 plotagens, você obviamente não pode confiar no padrão ColorOrder
.
Uma ótima maneira de definir N cores visualmente distintas é com o envio "Gerar cores distintas ao máximo perceptualmente" (GMPDC) no MATLAB Central File Exchange . É melhor descrito nas próprias palavras do autor:
Esta função gera um conjunto de cores que são distinguíveis por referência ao espaço de cores "Lab" , que se aproxima mais da percepção de cor humana do que RGB. Dada uma grande lista inicial de cores possíveis, ele escolhe iterativamente a entrada na lista que está mais distante (no espaço do Laboratório) de todas as entradas previamente escolhidas.
Por exemplo, quando 25 cores são solicitadas:
O envio do GMPDC foi escolhido no blog oficial do MathWorks como Escolha da Semana em 2010, em parte devido à capacidade de solicitar um número arbitrário de cores (em contraste com o MATLAB embutido em 7 cores padrão). Eles até fizeram a excelente sugestão de configurar o MATLAB ColorOrder
na inicialização para,
distinguishable_colors(20)
Claro, você pode definir o ColorOrder
para um único eixo ou simplesmente gerar uma lista de cores para usar da maneira que desejar. Por exemplo, para gerar 10 "cores distintas no máximo perceptualmente" e usá-las para 10 plotagens no mesmo eixo ( mas sem usar ColorOrder
, exigindo assim um loop ):
% 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
O processo é simplificado, sem necessidade de for
loop, com a ColorOrder
propriedade axis :
% X do tamanho N-por-P-por-2
mpdc10 = distinguishable_colors (10)
ha = eixos; segure (ha, 'ligado')
set (ha, 'ColorOrder', mpdc10)% --- set ColorOrder AQUI ---
plot (X (:,:, 1), X (:,:, 2), '-.')% loop NÃO necessário, 'Cor' NÃO necessária. Yay!
APÊNDICE
Para obter a ColorOrder
matriz RGB usada para o eixo atual,
get(gca,'ColorOrder')
Para obter o padrão ColorOrder
para novos eixos,
get(0,'DefaultAxesColorOrder')
Exemplo de configuração de novo global ColorOrder
com 10 cores no início do MATLAB, em startup.m
:
set(0,'DefaultAxesColorOrder',distinguishable_colors(10))