Estou tentando plotar várias estimativas de densidade de kernel no mesmo gráfico e quero que todas tenham cores diferentes. Eu tenho uma solução kludged usando uma string 'rgbcmyk'
e percorrendo-a para cada plotagem separada, mas começo a ter duplicatas após 7 iterações. Existe uma maneira mais fácil / eficiente de fazer isso e com mais opções de cores?
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
matlab
plot
matlab-figure
Doresoom
fonte
fonte
hold on
é funcionalmente equivalente ahold all
. No entanto, a questão de como obter mais do que as 7 cores padrão permanece. Um mapa de cores padrão pode ser uma solução conforme descrito por Azim ou uma função para gerar cores ajustadas para facilitar a discriminação visual pode ser usada, conforme abaixo .hold all
, obtenho plotagens em cores diferentes (embora deva dizer que elas parecem muito opacas), enquanto quando eu usohold on
, todas as minhas plotagens ficam azuis. Então eu me pergunto o que é equivalência funcional.hold on
fornece gráficos de cores diferentes. Você está usando uma versão mais antiga. Nos documentos atuais , "hold all
é o mesmo quehold on
. Observação: esta sintaxe será removida em uma versão futura. Use em seuhold on
lugar." Veja também as notas de lançamento .Respostas:
Você pode usar um mapa de cores como o HSV para gerar um conjunto de cores. Por exemplo:
O MATLAB tem 13 mapas de cores com nomes diferentes ( 'doc colormap' lista todos eles).
Outra opção para plotar linhas em cores diferentes é usar a propriedade LineStyleOrder ; consulte Definindo a cor das linhas para plotagem na documentação do MATLAB para obter mais informações.
fonte
hold all
solução do @Mark Elliot devido à sua versatilidade de poder escolher mapas de cores diferentes.Na verdade, um método de atalho decente para fazer as cores circularem é usar
hold all;
no lugar dehold on;
. Cada sucessivoplot
irá girar (automaticamente para você) através do mapa de cores padrão do MATLAB.Do site do MATLAB em
hold
:fonte
Resposta tardia, mas duas coisas a acrescentar:
'ColorOrder'
propriedade e como definir um padrão global com'DefaultAxesColorOrder'
, consulte o "Apêndice" na parte inferior desta postagem.A
ColorOrder
axes
propriedade permite MATLAB para alternar automaticamente através de uma lista de cores ao usarhold on/all
(novamente, consulte o Apêndice abaixo comoset
/get
oColorOrder
para um eixo específico ou globalmente viaDefaultAxesColorOrder
). 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ãoColorOrder
.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:
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,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 usarColorOrder
, exigindo assim um loop ):O processo é simplificado, sem necessidade de
for
loop, com aColorOrder
propriedade axis :APÊNDICE
Para obter a
ColorOrder
matriz RGB usada para o eixo atual,Para obter o padrão
ColorOrder
para novos eixos,Exemplo de configuração de novo global
ColorOrder
com 10 cores no início do MATLAB, emstartup.m
:fonte
Atrasado para a festa. Eu estava investigando isso sozinho e acabei de descobrir sobre esta opção de eixos chamada ColorOrder, você pode especificar a ordem de cores para a sessão ou apenas para a figura e, em seguida, apenas plotar uma matriz e deixar o MATLAB percorrer automaticamente as cores especificadas.
consulte Mudando o ColorOrder padrão
exemplo
fonte
set(gca,'ColorOrder',jet(5));
Se todos os vetores tiverem o mesmo tamanho, crie uma matriz e plote-a. Cada coluna é plotada com uma cor diferente automaticamente. Em seguida, você pode usar
legend
para indicar colunas:Ou, se você tiver uma célula com nomes de kernels, use
fonte