titles plots mtext font r colors palette color-palette

plots - text in r



¿Cómo generar una serie de colores más distintivos en R? (6)

Estoy trazando un conjunto de datos categóricos y quiero usar colores distintivos para representar diferentes categorías. Dado un número n , ¿cómo puedo obtener n número de colores MÁS distintivos en R? Gracias.


Aquí hay algunas opciones:

  1. Eche un vistazo a la función de palette :

    palette(rainbow(6)) # six color rainbow (palette(gray(seq(0,.9,len = 25)))) #grey scale

  2. Y la función colorRampPalette :

    ##Move from blue to red in four colours colorRampPalette(c("blue", "red"))( 4)

  3. Mira el paquete colorBrewer (y el website ). Si desea colores divergentes, seleccione divergir en el sitio. Por ejemplo,

    library(colorBrewer) brewer.pal(7, "BrBG")

  4. El sitio web I want hue da muchas bonitas paletas. Nuevamente, solo seleccione la paleta que necesita. Por ejemplo, puede obtener los colores rgb del sitio y crear su propia paleta:

    palette(c(rgb(170,93,152, maxColorValue=255), rgb(103,143,57, maxColorValue=255), rgb(196,95,46, maxColorValue=255), rgb(79,134,165, maxColorValue=255), rgb(205,71,103, maxColorValue=255), rgb(203,77,202, maxColorValue=255), rgb(115,113,206, maxColorValue=255)))


Me uní a todas las paletas cualitativas del paquete RColorBrewer . Las paletas cualitativas deben proporcionar X colores más distintivos cada una. Por supuesto, mezclarlos se une en una paleta de colores también similares, pero eso es lo mejor que puedo conseguir (74 colores).

library(RColorBrewer) n <- 60 qual_col_pals = brewer.pal.info[brewer.pal.info$category == ''qual'',] col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals))) pie(rep(1,n), col=sample(col_vector, n))

Otra solución es: tomar todos los colores R de los dispositivos gráficos y tomar una muestra de ellos. Eliminé tonos de gris ya que son muy similares. Esto da 433 colores

color = grDevices::colors()[grep(''gr(a|e)y'', grDevices::colors(), invert = T)]

pie(rep(1,n), col=sample(color, n))

con 200 colores n = 200 :

pie(rep(1,n), col=sample(color, n))


Puede usar colorRampPalette desde la base o el paquete RColorBrewer :

Con colorRampPalette , puede especificar colores de la siguiente manera:

colorRampPalette(c("red", "green"))(5) # [1] "#FF0000" "#BF3F00" "#7F7F00" "#3FBF00" "#00FF00"

También puede proporcionar códigos hexadecimales alternativamente:

colorRampPalette(c("#3794bf", "#FFFFFF", "#df8640"))(5) # [1] "#3794BF" "#9BC9DF" "#FFFFFF" "#EFC29F" "#DF8640" # Note that the mid color is the mid value...

Con RColorBrewer puede usar colores de paletas preexistentes:

require(RColorBrewer) brewer.pal(9, "Set1") # [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF" # [9] "#999999"

Mire el paquete RColorBrewer para otras paletas disponibles. Espero que esto ayude.


Recomiendo usar una fuente externa para paletas de colores grandes.

http://tools.medialab.sciences-po.fr/iwanthue/

tiene un servicio para componer cualquier tamaño de paleta según diversos parámetros y

https://graphicdesign.stackexchange.com/questions/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815

discute el problema genérico desde la perspectiva de los diseñadores de gráficos y ofrece muchos ejemplos de paletas utilizables.

Para comprender una paleta de valores RGB, solo tiene que copiar los valores en un vector como en por ejemplo:

colors37 = c("#466791","#60bf37","#953ada","#4fbe6c","#ce49d3","#a7b43d","#5a51dc","#d49f36","#552095","#507f2d","#db37aa","#84b67c","#a06fda","#df462a","#5b83db","#c76c2d","#4f49a3","#82702d","#dd6bbb","#334c22","#d83979","#55baad","#dc4555","#62aad3","#8c3025","#417d61","#862977","#bba672","#403367","#da8a6d","#a79cd4","#71482c","#c689d0","#6b2940","#d593a7","#895c8b","#bd5975")


También hay una forma bastante "nueva" de obtener una paleta de colores distintiva óptima, también con respecto al daltonismo y la posible conversión en blanco y negro con las paletas de colores Viridis .

Para obtener la paleta, simplemente instale el paquete y use la función viridis_pal()

install.packages("viridis") library(viridis) viridis_pal(option = "D")(n) # n = number of colors seeked

Con las opciones "A", "B", "C" y "D" para elegir entre estas paletas:

Para ver más ejemplos, visite la viñeta del paquete. Algunos de los bellos ejemplos en él:

También hay una excelente charla que explica la complejidad de las buenas paletas en YouTube:

Un mejor mapa de color predeterminado para Matplotlib | SciPy 2015 | Nathaniel Smith y Stéfan van der Walt


También puedes probar el paquete randomcoloR :

library(randomcoloR) n <- 20 palette <- distinctColorPalette(n)

Puede ver que se elige un conjunto de colores muy distintos cuando se visualiza en un gráfico circular (como sugieren otras respuestas aquí):

pie(rep(1, n), col=palette)

Se muestra en un gráfico circular con 50 colores:

n <- 50 palette <- distinctColorPalette(n) pie(rep(1, n), col=palette)