Estou plotando um conjunto de dados categóricos e quero usar cores distintas para representar diferentes categorias. Dado um número n
, como posso obter o n
número de MAIS cores distintas em R? Obrigado.
130
Estou plotando um conjunto de dados categóricos e quero usar cores distintas para representar diferentes categorias. Dado um número n
, como posso obter o n
número de MAIS cores distintas em R? Obrigado.
Respostas:
Juntei todas as paletas qualitativas do
RColorBrewer
pacote. As paletas qualitativas devem fornecer X cores mais distintas cada. Obviamente, misturá-los junta-se a uma paleta de cores semelhantes, mas é o melhor que consigo (74 cores).Outra solução é: pegue todas as cores R de dispositivos gráficos e faça uma amostra deles. Eu removi tons de cinza, pois são muito semelhantes. Isso dá 433 cores
com 200 cores
n = 200
:fonte
col
nomes de cores correspondentes?col
você quer dizer? ocolor
de dispositivos gráficos tem nomes. Se você quer dizer em, nem todos código geral hex têm nomes de cores correspondentes (há apenas 433 cores emgrDevices
mas muitos códigos mais hex)col=sample(col_vector, n)
oRColorBrewer
pacote no seu trecho de código. Por exemplo, Como encontrar os nomes das cores#B3E2CD, #E78AC3, #B3DE69
disponíveis emsample(col_vector,3)
. Como alternativa, Como encontrar todos os códigos hexadecimais fornecidos pelabrewer.pal
função com seus nomes de cores.RColorBrewer
paletas não são derivadas degrDevices
cores, que têm nomes mapeados, mas são apenas códigos hexadecimais, que eu saiba, você não pode fazer isso comRColorBrewer
paletas, mesmo qualitativas.Aqui estão algumas opções:
Dê uma olhada na
palette
função:E a
colorRampPalette
função:Veja o
colorBrewer
pacote (e o site ). Se você quiser cores divergentes, selecione divergências no site. Por exemplo,O site Eu quero o matiz oferece muitas paletas agradáveis. Mais uma vez, basta selecionar a paleta que você precisa. Por exemplo, você pode obter as cores rgb no site e criar sua própria paleta:
fonte
I want hue
é um site incrível. É exatamente isso que eu quero. Dado um número, como gerar uma paleta do número de cores. mas podemos fazer isso no R automaticamente?i want hue
tivesse uma API que permitisse que ela fosse automaticamente consultada (talvez exista - eu não gastei muito tempo procurando) #i want hue
, aqui . A eficiência pode ser melhorada (por exemplo, salvando amostras de cores como objetos de dados), mas a idéia geral está lá. (Load withdevtools::source_gist('45b49da5e260a9fc1cd7')
)Você também pode experimentar o
randomcoloR
pacote :Você pode ver que um conjunto de cores altamente distintas é escolhido ao visualizar em um gráfico de pizza (conforme sugerido por outras respostas aqui):
Mostrado em um gráfico de pizza com 50 cores:
fonte
unname(distinctColorPalette(n))
para fazer isso funcionar com o ggplot. Eu acho que o ggplot precisa de um vetor sem nome.col_vector <- unname(distinctColorPalette(n))
e então... + scale_color_manual(values=col_vector) ...
Não é uma resposta à pergunta do OP, mas vale a pena mencionar que existe o
viridis
pacote que possui boas paletas de cores para dados sequenciais. Eles são perceptualmente uniformes, daltônicos, seguros e de impressão.Para chegar a paleta, basta instalar o pacote e usar a função
viridis_pal()
. Existem quatro opções "A", "B", "C" e "D" para escolherHá também uma excelente conversa explicando a complexidade de bons mapas de cores no YouTube:
Um melhor mapa de cores padrão para o Matplotlib | SciPy 2015 | Nathaniel Smith e Stéfan van der Walt
fonte
Você pode usar
colorRampPalette
da base ou doRColorBrewer
pacote:Com
colorRampPalette
, você pode especificar cores da seguinte maneira:Como alternativa, você também pode fornecer códigos hexadecimais:
Com
RColorBrewer
você pode usar cores de paletas pré-existentes:Veja o
RColorBrewer
pacote para outras paletas disponíveis. Espero que isto ajude.fonte
brewer.pal
. mas é limitado a 9 cores. Na verdade, tenho mais de 9 categorias. As primeiras alternativas geram cores de gradiente, que não são tão distintas quanto eu quero.Eu recomendaria usar uma fonte externa para grandes paletas de cores.
http://tools.medialab.sciences-po.fr/iwanthue/
possui um serviço para compor qualquer tamanho de paleta de acordo com vários parâmetros e
/graphicdesign/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815
discute o problema genérico da perspectiva de designers gráficos e fornece muitos exemplos de paletas utilizáveis.
Para incluir uma paleta de valores RGB, basta copiar os valores em um vetor, como por exemplo:
fonte
Encontrei um site que oferece uma lista de 20 cores distintas: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
Você pode tentar!
fonte
n
cores distintas, não um conjunto de cores definidas. Tente atualizar sua respostaVocê pode gerar um conjunto de cores como este:
Essas cores são tão distintas quanto possível. Para essas cores semelhantes, elas formam um gradiente para que você possa distinguir facilmente as diferenças entre elas.
fonte
No meu entendimento, a busca de cores distintas está relacionada à busca eficiente de um cubo unitário, em que três dimensões do cubo são três vetores ao longo dos eixos vermelho, verde e azul. Isso pode ser simplificado para procurar em um cilindro (analogia HSV), onde você fixa Saturação (S) e Valor (V) e encontra valores aleatórios de Matiz. Funciona em muitos casos, e veja isso aqui:
https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
Em R,
Uma maneira alternativa é usar o pacote R "uniformemente" https://cran.r-project.org/web/packages/uniformly/index.html
e essa função simples pode gerar cores distintas:
Pode-se pensar em uma função um pouco mais envolvida pela pesquisa em grade:
verifique estas funções:
No entanto, observe que definir uma paleta distinta com cores perceptíveis em humanos não é simples. Qual das abordagens acima gera diversas cores ainda não foi testada.
fonte
Você pode usar o pacote Polychrome para esse fim. Requer apenas o número de cores e algumas
seedcolors
. Por exemplo:Você pode aprender mais sobre este pacote em https://www.jstatsoft.org/article/view/v090c01 .
fonte