Я рисую категориальный набор данных и хочу использовать отличительные цвета для представления разных категорий. Учитывая число n
, как я могу получить n
число отличительных цветов MOST в R? Спасибо.
Как создать ряд наиболее отличительных цветов в R?
Ответ 1
Я присоединился ко всем качественным палитрам из пакета 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))
Другое решение: взять все цвета R из графических устройств и образец из них. Я удалил оттенки серого, поскольку они слишком похожи. Это дает 433 цвета
color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)]
pie(rep(1,n), col=sample(color, n))
с 200 цветами n = 200
:
pie(rep(1,n), col=sample(color, n))
Ответ 2
Вот несколько вариантов:
-
Посмотрите на функцию
palette
:palette(rainbow(6)) # six color rainbow (palette(gray(seq(0,.9,len = 25)))) #grey scale
-
И функция
colorRampPalette
:##Move from blue to red in four colours colorRampPalette(c("blue", "red"))( 4)
-
Посмотрите на пакет
colorBrewer
(и сайт). Если вам нужны расходящиеся цвета, выберите расходящийся на сайте. Например,library(colorBrewer) brewer.pal(7, "BrBG")
-
Я хочу, чтобы веб-сайт 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)))
Ответ 3
Вы также можете попробовать 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)
Ответ 4
Не ответ на вопрос OP, но стоит упомянуть, что есть пакет viridis
, который имеет хорошие цветовые палитры для последовательных данных. Они одинаково воспринимаемы, безопасны для слепых и удобны для печати.
Чтобы получить палитру, просто установите пакет и используйте функцию viridis_pal()
. Есть четыре варианта "A", "B", "C" и "D" на выбор
install.packages("viridis")
library(viridis)
viridis_pal(option = "D")(n) # n = number of colors seeked
Существует также отличный доклад, объясняющий сложность хороших цветовых карт на YouTube:
Лучшая цветовая карта по умолчанию для Matplotlib | SciPy 2015 | Натаниэль Смит и Стефан ван дер Уолт
Ответ 5
Вы можете использовать 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
для других доступных палитр. Надеюсь, это поможет.
Ответ 6
Я бы рекомендовал использовать внешний источник для больших цветовых палитр.
http://tools.medialab.sciences-po.fr/iwanthue/
имеет сервис для составления любого размера палитры в соответствии с различными параметрами и
обсуждает общую проблему с точки зрения графических дизайнеров и дает множество примеров используемых палитр.
Чтобы содержать палитру из значений 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")
Ответ 7
Я нашел сайт, предлагающий список из 20 отличительных цветов: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
col_vector<-c('#e6194b', '#3cb44b', '#ffe119', '#4363d8', '#f58231', '#911eb4', '#46f0f0', '#f032e6', '#bcf60c', '#fabebe', '#008080', '#e6beff', '#9a6324', '#fffac8', '#800000', '#aaffc3', '#808000', '#ffd8b1', '#000075', '#808080', '#ffffff', '#000000')
Вы можете попробовать!
Ответ 8
Вы можете создать набор цветов следующим образом:
myCol = c("pink1", "violet", "mediumpurple1", "slateblue1", "purple", "purple3",
"turquoise2", "skyblue", "steelblue", "blue2", "navyblue",
"orange", "tomato", "coral2", "palevioletred", "violetred", "red2",
"springgreen2", "yellowgreen", "palegreen4",
"wheat2", "tan", "tan2", "tan3", "brown",
"grey70", "grey50", "grey30")
Эти цвета настолько различны, насколько это возможно. Для этих похожих цветов они образуют градиент, чтобы вы могли легко различить их.