Я рисую категориальный набор данных и хочу использовать отличительные цвета для представления разных категорий. Учитывая число n
, как я могу получить n
количество САМЫХ отличительных цветов в R? Спасибо.
131
Я рисую категориальный набор данных и хочу использовать отличительные цвета для представления разных категорий. Учитывая число n
, как я могу получить n
количество САМЫХ отличительных цветов в R? Спасибо.
Ответы:
Соединил все качественные палитры из
RColorBrewer
пакета. Качественные палитры должны обеспечивать X наиболее отличительных цветов каждая. Конечно, их смешивание объединяет в одну палитру и похожие цвета, но это лучшее, что я могу получить (74 цвета).Другое решение: взять все цвета R с графических устройств и взять с них образцы. Я удалил оттенки серого, так как они слишком похожи. Это дает 433 цвета
с 200 цветами
n = 200
:источник
col
соответствующие названия цветов?col
ты имеешь в виду?color
от графических устройств имеет название. Если вы имеете в виду в целом, не все шестнадцатеричные коды имеют соответствующие названия цветов (в них всего 433 цвета,grDevices
но гораздо больше шестнадцатеричных кодов)col=sample(col_vector, n)
изRColorBrewer
пакета в вашем фрагменте кода. Например, как найти названия цветов для#B3E2CD, #E78AC3, #B3DE69
доступных изsample(col_vector,3)
. Или как найти все шестнадцатеричные коды, заданныеbrewer.pal
функцией, с их названиями цветов.RColorBrewer
палитры не являются производными отgrDevices
цветов, которым присвоены имена, а представляют собой просто шестнадцатеричные коды, насколько мне известно, вы не можете сделать это сRColorBrewer
палитрами, даже с качественными.Вот несколько вариантов:
Взгляните на
palette
функцию:И
colorRampPalette
функция:Посмотрите на
colorBrewer
пакет (и на сайт ). Если вы хотите расходящиеся цвета, то выберите на сайте расходящиеся . Например,На веб-сайте « Я хочу оттенок» есть много хороших палитр. Опять же, просто выберите ту палитру, которая вам нужна. Например, вы можете получить с сайта цвета rgb и составить свою палитру:
источник
I want hue
отличный сайт. Это именно то, что я хочу. Учитывая число, как создать палитру из числа цветов. но можем ли мы сделать это в R автоматически?i want hue
него был API, который позволял бы автоматически запрашивать его (возможно, это так - я не долго искал)i want hue
, здесь . Эффективность можно повысить (например, за счет сохранения образцов цвета как объектов данных), но общая идея есть. (Загрузить сdevtools::source_gist('45b49da5e260a9fc1cd7')
)Вы также можете попробовать
randomcoloR
пакет :Вы можете видеть, что при визуализации на круговой диаграмме выбирается набор очень разных цветов (как предлагают другие ответы здесь):
Представлено на круговой диаграмме с 50 цветами:
источник
unname(distinctColorPalette(n))
для работы с ggplot. Думаю, ggplot нужен безымянный вектор.col_vector <- unname(distinctColorPalette(n))
а затем... + scale_color_manual(values=col_vector) ...
Не ответ на вопрос OP, но стоит упомянуть, что есть
viridis
пакет, который имеет хорошие цветовые палитры для последовательных данных. Они одинаково воспринимаются, безопасны для дальтоников и подходят для печати.Чтобы получить палитру, просто установите пакет и воспользуйтесь функцией
viridis_pal()
. Есть четыре варианта «A», «B», «C» и «D» на выбор.Также есть отличный доклад, объясняющий сложность хороших цветовых карт на YouTube:
Лучшая цветовая карта по умолчанию для Matplotlib | SciPy 2015 | Натаниэль Смит и Стефан ван дер Уолт
источник
Вы можете использовать
colorRampPalette
из базы илиRColorBrewer
пакета:С помощью
colorRampPalette
вы можете указать цвета следующим образом:Вы также можете указать шестнадцатеричные коды:
С
RColorBrewer
вами может использовать цвета из уже существующих палитр:Посмотрите в
RColorBrewer
пакете другие доступные палитры. Надеюсь это поможет.источник
brewer.pal
. но он ограничен 9 цветами. На самом деле у меня более 9 категорий. Первые альтернативы генерируют цвета градиента, которые не так различимы, как мне хотелось бы.Я бы рекомендовал использовать внешний источник для больших цветовых палитр.
http://tools.medialab.sciences-po.fr/iwanthue/
есть услуга составления палитры любого размера по различным параметрам и
/graphicdesign/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815
обсуждает общую проблему с точки зрения графических дизайнеров и дает множество примеров используемых палитр.
Чтобы составить палитру из значений RGB, вам просто нужно скопировать значения в вектор, например:
источник
Я нашел веб-сайт, предлагающий список из 20 отличительных цветов: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
Вы можете попробовать!
источник
n
отличительных цветов, а не о наборе определенных цветов. Попробуйте обновить свой ответВы можете создать такой набор цветов:
Эти цвета максимально различимы. Для этих похожих цветов они образуют градиент, чтобы вы могли легко отличить их.
источник
В моем понимании поиск отличительных цветов связан с эффективным поиском из единичного куба, где 3 измерения куба - это три вектора по красной, зеленой и синей осям. Это можно упростить для поиска в цилиндре (аналогия HSV), где вы фиксируете насыщенность (S) и значение (V) и находите случайные значения оттенка. Это работает во многих случаях, и посмотрите это здесь:
https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
В R
Альтернативный способ - использовать пакет R «единообразно» https://cran.r-project.org/web/packages/uniformly/index.html
и эта простая функция может генерировать отличительные цвета:
Можно придумать немного более сложную функцию с помощью поиска по сетке:
проверьте эти функции:
Однако обратите внимание, что определить отдельную палитру цветов, воспринимаемых человеком, непросто. Какой из вышеперечисленных подходов генерирует разнообразный набор цветов, еще предстоит проверить.
источник
Для этого можно использовать пакет Polychrome . Просто требуется количество цветов и несколько
seedcolors
. Например:Вы можете узнать больше об этом пакете на https://www.jstatsoft.org/article/view/v090c01 .
источник