Как создать ряд наиболее отличительных цветов в R?

Я рисую категориальный dataset и хочу использовать отличительные цвета для представления разных категорий. Учитывая число n , как я могу получить n число наиболее характерных цветов в R? Благодарю.

Я присоединился ко всем качественным палитрам из пакета RColorBrewer . Качественные палитры должны обеспечивать X самых отличительных цветов каждый. Конечно, смешивание их объединяет в одну палитру также похожие цвета, но это лучшее, что я могу получить (74 цвета).

 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)) 

colour_Brewer_qual_60

Другое решение: взять все цвета R из графических устройств и образец из них. Я удалил оттенки серого, поскольку они слишком похожи. Это дает 433 цвета

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

набор из 20 цветов

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

с 200 цветами n = 200 :

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

набор из 200 цветов

Вот несколько вариантов:

  1. Посмотрите на функцию palette :

     palette(rainbow(6)) # six color rainbow (palette(gray(seq(0,.9,len = 25)))) #grey scale 
  2. И функция colorRampPalette :

     ##Move from blue to red in four colours colorRampPalette(c("blue", "red"))( 4) 
  3. Посмотрите на пакет colorBrewer (и веб-сайт ). Если вы хотите расходящиеся цвета, то выберите расхождение на сайте. Например,

     library(colorBrewer) brewer.pal(7, "BrBG") 
  4. Я хочу, чтобы веб-сайт hue дал много приятных палитр. Опять же, просто выберите нужную палитру. Например, вы можете получить цвета rgb с сайта и создать свою собственную палитру:

     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))) 

Вы также можете попробовать пакет randomcoloR :

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

Вы можете видеть, что при визуализации в круговой диаграмме выбирается набор очень разных цветов, как это предлагается другими ответами здесь:

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

введите описание изображения здесь

Показаны в круговой диаграмме с 50 цветами:

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

введите описание изображения здесь

Вы можете использовать colorRampPalette из базового или RColorBrewer пакета:

С помощью colorRampPalette вы можете указать цвета следующим образом:

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

Вы также можете предоставить шестнадцатеричные коды:

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

С RColorBrewer вы можете использовать цвета из ранее существующих палитр:

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

Посмотрите на пакет RColorBrewer для других доступных палитр. Надеюсь это поможет.

Существует также довольно «новый» способ получения оптимальной отличительной цветовой палитры, также в отношении цветовой слепоты и возможного черно-белого преобразования с цветовой палитрой Viridis .

Чтобы получить палитру, просто установите пакет и используйте функцию viridis_pal()

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

С вариантами «A», «B», «C» и «D» выберите эти палитры:

введите описание изображения здесь

Для получения дополнительных примеров посетите виньетку. Некоторые из красивейших примеров в нем:

введите описание изображения здесь

введите описание изображения здесь

Существует также отличный разговор, объясняющий сложность хороших палитр на YouTube:

Лучше по умолчанию Colormap для Matplotlib | SciPy 2015 | Натаниэль Смит и Стефан ван дер Уолт

Я бы рекомендовал использовать внешний источник для больших цветовых палитр.

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

имеет сервис для составления любого размера палитры в соответствии с различными параметрами и

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

обсуждает общую проблему с точки зрения графических дизайнеров и дает множество примеров используемых палитр.

Чтобы содержать палитру из значений RGB, вам просто нужно скопировать значения в вектор, как например:

 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") 
Давайте будем гением компьютера.