«Лучшая» серия цветов, используемая для дифференциации серий на графиках издательского качества

89

Было ли проведено какое-либо исследование о том, какой набор цветов лучше всего использовать для отображения нескольких серий на одном графике? Я только что использовал значения по умолчанию matplotlib, и они выглядят немного по-детски, так как они все яркие, основные цвета.

Дэвид Холлман
источник
28
Это не отвечает на ваш вопрос, но я думаю, что важно упомянуть. По возможности, любую выбранную цветовую схему следует дополнять различными символами или стилями линий, чтобы при печати графика в черно-белом режиме ее было легко понять. Слишком часто авторы полагаются исключительно на цвет, что делает рисунки бесполезными для дальтоников и тех, кто предпочитает читать черно-белую печатную версию вашей статьи. Сюжеты должны всегда, если возможно, работать в черно-белом режиме и работать «лучше» в цвете.
WetlabStudent
11
+1 к MHH. Легендарный фрагмент телевизионного комментария о снукере косвенно указывает на то же: «Стив идет за розовым шаром - и для тех из вас, кто смотрит черно-белое изображение, розовое рядом с зеленым». Объяснение для молодых читателей: это происходит из-за того, что некоторые люди могли позволить себе цветное телевидение, а другим приходилось выбирать более дешевый черно-белый телевизор.
Ник Кокс
5
«Лучший» для каких целей? Это не тривиальный или легкомысленный вопрос. Чтобы произвести впечатление на читателей интернет-форума, я использую графические символы, которые работают без цвета, а затем украшаю их цветами радуги (которые могут быть значимыми, но в первую очередь привлекают внимание и дают ощущение «качества»). Для графиков, предназначенных для передачи данных, может быть выбрана другая цветовая схема, тогда как для графиков, которые создаются исследовательским способом для выявления возможных неожиданных паттернов (в визуальном гештальте ), схема должна зависеть от цели: дифференциация, агрегация, выбор, Другие?
whuber
2
@whuber: Вы делаете точку. Я должен был указать, что я имел в виду публикацию в научной литературе, и в целом я хотел спросить ответы на каждую из категорий агрегации, отбора, дифференциации и т. Д. Действительно, агрегация и дифференциация часто не являются отдельными целями: на рисунках из одной из моих работ ( dx.doi.org/10.1063/1.4864755 ) мне нужны были оба (и я не думаю, что я справился с этим очень хорошо). (Извините тем из вас, кто не в академических кампусах; я постараюсь выложить общедоступную ссылку в ближайшее время)
Дэвид Холлман
2
Довольно хорошая дискуссия в качестве отправной точки на graphicdesign.stackexchange.com/questions/7960/… graphicdesign.stackexchange.com/questions/3682/…
Геренук

Ответы:

53

Общим ориентиром для выбора цветовой палитры является работа Синтии Брюер на ColorBrewer . Цвета были выбраны на основе шаблонов восприятия в картограммах, но большинство из тех же советов относится к использованию цвета на любом типе графика для различения шаблонов данных. Если цвет предназначен только для того, чтобы различать разные линии, то нужна качественная палитра.

Часто цвет не нужен на линейных графиках с несколькими линиями, и различные точечные символы и / или штриховые рисунки достаточно эффективны. Более распространенная проблема с линейными графиками состоит в том, что, если линии часто перекрываются, будет трудно различить различные образцы, независимо от того, какие символы или цвет вы используете. Стивен Косслин рекомендует общее правило, чтобы на графике было только 4 линии. Если у вас есть больше, рассмотрите возможность разбиения линий на несколько небольших графиков. Вот пример, показывающий рекомендации

Цвет не требуется, и этикетки более чем достаточно.

Энди У
источник
4
Мне нравится палитра "Dark2" от ColorBrewer!
Gimelist
5
Спасибо за рекомендацию ColorBrewer! Это то, что я искал.
Дэвид Холлман,
Изображение в градациях серого не работает, если есть две серии с одинаковым значением либо где-то посередине (две серии не могут быть прослежены после этой точки), либо в конце (метки не смогут различить, какие серия есть какая). Это здорово, когда все работает ...
naught101
Согласитесь @ naught101 для середины (совпадающие концы просто поместите метку где-нибудь перед концом). Это одна из причин, по которой на самом деле не используется линейная интерполяция между точками, а используется какой-либо тип сплайна. В этом случае сплайн будет изгибаться в разных направлениях. Это происходит довольно часто на плотных параллельных координатных графиках. (Дрожание может также помочь с данными со многими связями, такими как данные с низким целым числом.)
Энди У,
1
Ваши отзывы о данных, а именно. книги на Амазоне невероятные. Спасибо тебе за это.
Энди W
40

Очень много хороших советов в других ответах, но вот несколько дополнительных моментов из моих собственных низкоуровневых советов студентам. Естественно, это всего лишь совет, который нужно продумать, задав ключевые вопросы: для чего предназначен мой график? Что имеет смысл с этими данными? Кто такие читатели? Что я ожидаю, что цвет (ы) делать в графике? График работает хорошо, независимо от чужих догм?

Кроме того, важность цвета сильно варьируется от одного графика к другому. Для картограммы или пластыря, в которой идея действительно состоит в том, что разные области окрашены или, по крайней мере, затенены по-разному, успех графа связан с успехом его цветовой схемы. Для других видов графиков цвета могут быть необязательными или даже неприятными.

  1. Все ваши цвета нужны? Например, если разные переменные или группы четко различаются по текстовым меткам в разных областях графика, то отдельные цвета тоже часто бывают лишними. Остерегайтесь эффектов фруктового салата или техноколора. Например, для круговой диаграммы с текстовой маркировкой или срезами цвет не несет никакой дополнительной информации. (Если ваша круговая диаграмма зависит от ключа или легенды, вы, вероятно, пытаетесь использовать неправильный вид графика.)

  2. Никогда не полагайтесь на контраст между красным и зеленым, так как многие люди пытаются различить эти цвета.

  3. Радужные последовательности (ROYGBIV или красный-оранжевый-желтый-зеленый-синий-индиго-фиолетовый) могут быть привлекательными по физическим соображениям, но на практике они не очень хорошо работают. Например, желтый обычно является слабым цветом, в то время как оранжевый и зеленый обычно сильнее, поэтому впечатление даже не является монотонным.

  4. Избегайте любой цветовой схемы, которая имеет следствие больших пятен яркого цвета.

  5. Последовательность от темно-красного до темно-синего хорошо работает, когда требуется упорядоченная последовательность. Если белый (как обычно) фоновый цвет где-либо, не используйте его, но переходите от бледно-красного к бледно-голубому. [добавлено 1 марта 2018 г.] Возможно, слишком очевидно, чтобы подчеркнуть: красный цвет имеет коннотацию негатива и / или опасности для многих, что может быть полезным, а синий может означать позитив. Слишком очевидно, чтобы подчеркнуть, но я делаю это в любом случае: красный и синий имеют политическое значение во многих странах.

  6. Синий и оранжевый прекрасно сочетаются (благодарный кивок Хасти, Тибширани и Фридману здесь: http://web.stanford.edu/~hastie/local.ftp/Springer/OLD/ESLII_print4.pdf ) [добавлено 1 марта 2018 года] Многие Вступительные книги по визуализации теперь рекомендуют оранжевый, синий и серый в качестве базовой палитры: оранжевый и / или синий для того, что вас волнует, и серый для фона.

  7. Оттенки серого от светло-серого до темно-серого могут хорошо работать, и это хорошая идея, когда о цветопередаче не может быть и речи. (Это паршивый принтер, который не может сделать справедливый удар в градациях серого.) (Серый цвет, если хотите, предпочтения меняются по океанам, кажется; так же, как с цветом и цветом.)

  8. [добавлено 5 августа 2016] Довольно общий принцип заключается в том, что часто два цвета работают намного лучше, чем многие. Если обе группы представляют интерес, выберите одинаково яркие цвета (например, красный или оранжевый и синий). Если одна группа представляет особый интерес среди нескольких, сделайте ее синей или оранжевой, а остальные - серой. Использование семи цветов для семи групп в принципе несет информацию, но трудно даже сосредоточиться на одном цвете в то время, когда существует конкуренция со стороны нескольких других. Маленькие мультипликаторы могут быть лучше для нескольких групп, чем многоцветный сюжет.

Ник Кокс
источник
1
Очень хорошее замечание о слабых и сильных цветах
shadowtalker
2
Пункт 2 ОЧЕНЬ важен. Один из моих учителей статистики был дальтоником и с радостью использовал «светло-желтый» и «светло-желтый» на графике. Цвет был практически идентичен нам, но для него они были легко различимы.
Кристиан Зауэр
1
Спасибо за советы, особенно № 2. Я оглянулся на свои графики и понял, что красный и зеленый - это первые два цвета, которые всегда выбирает matplotlib. Это не так здорово.
Дэвид Холлман,
Это кажется глупым дефолтом.
Ник Кокс,
27

На самом деле было много исследований по этому вопросу в последние годы.

Важным моментом является «семантический резонанс». Это в основном означает «цвета, которые соответствуют тому, что они представляют», например, временной ряд для денег должен быть окрашен в зеленый цвет, по крайней мере, для аудитории в США. Это, очевидно, улучшает понимание. Линь и др. (2013) опубликовали одну очень интересную статью по этому вопросу: http://vis.stanford.edu/papers/semantically-resonant-colors.

Также на http://tools.medialab.sciences-po.fr/iwanthue/ есть очень хороший генератор цветов iWantHue с большим количеством информации на других вкладках.

Рекомендации

Лин, Шарон, Джули Фортуна, Чинмей Кулкарни, Морин Стоун и Джеффри Хир. (2013). Выбор семантически резонансных цветов для визуализации данных. Форум компьютерной графики (Proc. EuroVis), 2013

shadowtalker
источник
13
+1 ... однако некоторые вещи, такие как пример денег , не универсальны. Деньги могут быть зелеными (-иш) в США. Это не зеленый везде, и связь с цветом может варьироваться от страны к стране (например, кто-то в Германии может с большей вероятностью ассоциировать синий с деньгами, хотя в настоящее время он обычно бывает разных цветов).
Glen_b
@Glen_b хорошая точка зрения
shadowtalker
1
+1 за цитирование статей, в которых лучше всего упоминаются первые три слова вопроса :-)
Дэвид Холлман
22

Пол Тол предлагает на своем веб-сайте цветовую схему, оптимизированную для цветовых различий (т. Е. Категориальных или качественных данных) и дальтонизма , а также подробно в «техническом сообщении» (PDF-файл), на который есть ссылки. Он утверждает:

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

  • различный для всех людей, включая дальтоников;
  • отличается от черного и белого;
  • отчетливый на экране и на бумаге; а также
  • по-прежнему хорошо сочетаются друг с другом.

Я взял цветовую схему из его «Палитры 1» из 9 самых разных цветов и поместил ее в свой matplotlibrcфайл под axes.color_cycle:

axes.color_cycle    : 332288, 88CCEE, 44AA99, 117733, 999933, DDCC77, CC6677, 882255, AA4499

Затем, заимствуя из ответа Джо Кингтона линии по умолчанию, как показано:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

x = np.linspace(0, 20, 100)

fig, axes = plt.subplots(nrows=2)

for i in range(1,10):
    axes[0].plot(x, i * (x - 10)**2)

for i in range(1,10):
    axes[1].plot(x, i * np.cos(x))

plt.show()

результаты в:

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

Что касается расходящихся цветовых карт (например, для представления скалярных значений), лучшим справочным материалом, который я видел, является статья Кеннета Морленда, доступная здесь " Расхождение цветовых карт для научной визуализации ". Он разработал прохладно-теплую схему, чтобы заменить радужную схему, и «представляет алгоритм, который позволяет пользователям легко создавать свои собственные индивидуальные карты цветов».

Еще один полезный источник информации об использовании цвета в научной визуализации исходит от Роберта Симмона, человека, который создал изображение «Синий мрамор» для НАСА. Смотрите его серию сообщений на веб-сайте Обсерватории Земли.

другой бен
источник
6
+1 к единственному (!) Ответу из девяти, который фактически показывает цвета в ответ на вопрос о «лучших цветах».
говорит амеба: восстанови Монику
@amoeba: хорошо, больше нет :-)
Тун
20

На colorbrewer2.org вы можете найти качественные , последовательные и расходящиеся цветовые схемы. Качественный максимизирует разницу между последовательными цветами, и это то, что я использую в gnuplot. Прелесть сайта в том, что вы можете легко скопировать шестнадцатеричные коды цветов, чтобы их было проще импортировать. В качестве примера я использую следующий набор из 8 цветов:

#e41a1c
#377eb8
#4daf4a
#984ea3
#ff7f00
#ffff33
#a65628
#f781bf

Это довольно приятно и дает четкие результаты.

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

Джозеф д'Аримафея
источник
1
Я лично не нахожу ярко-желтый цвет ясным сюжетом
ромбододекаэдр
11

Существует множество сайтов, посвященных выбору цветовых палитр. Я не знаю, что существует определенный набор цветов, который объективно лучший, вам придется выбирать в зависимости от вашей аудитории и тона вашей работы.

Посетите http://www.colourlovers.com/palettes или http://design-seeds.com/index.php/search, чтобы начать. У некоторых из них есть цвета, близкие двум, чтобы показать разные группы, но другие дадут вам дополнительные цвета в более широком диапазоне.

Вы также можете проверить предопределенные наборы цветов не по умолчанию в Matplotlib .

Джордан Бентли
источник
5

Мне нравится палитра Dark2 от colorbrewer для точечных графиков. Мы использовали это в книге ggobi , www.ggobi.org/book . Но в остальном цветовые палитры предназначены для географических областей, а не для графиков данных. Хороший выбор цвета все еще является проблемой для точечных графиков.

Пакеты R colorspaceи dichromatполезны. colorspaceпозволяет выбирать цвета вокруг колеса: вы можете проводить часы / дни тонкой настройки. dichromatпомогает проверить на дальтонизм.

ggplot2 как правило, имеет хорошие значения по умолчанию, хотя не обязательно дальтоники.

Расхождение схемы красного на синий выглядит хорошо на вашем компьютере, но не очень хорошо проецируется.

Дайан Кук
источник
3

Другой возможностью было бы найти набор цветов, которые а) равноудалены в LAB, б) учитывают дальтонизм и в) могут вписаться в гамму цветового пространства sRGB, а также в гаммы наиболее распространенных пространств CMYK.

Я думаю, что последнее требование является необходимостью для любого метода выбора цветов - он не приносит никакой пользы, если цвета хорошо выглядят на экране, но запутывается при печати в процессе CMYK. И поскольку ОП указала «качество публикации», я предполагаю, что графики действительно будут напечатаны в CMYK.

JenSCDC
источник
3

Это моя любимая схема. Он имеет 20 (!!!!) различных цветов, каждый из которых легко различим. Это, вероятно, не для дальтоников, хотя.

#e6194b
#3cb44b
#ffe119
#0082c8
#f58231
#911eb4
#46f0f0
#f032e6
#d2f53c
#fabebe
#008080
#e6beff
#aa6e28
#fffac8
#800000
#aaffc3
#808000
#ffd8b1
#000080
#808080
#ffffff
#000000
enigmaticPhysicist
источник
2

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

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

Если вы используете более 6 строк, вы заполняете больше места и переходите к рисованию цветных блоков. Для такого рода сюжетов я думаю, что каждый случай должен рассматриваться отдельно. Вы хотите, чтобы выделялись крайности или переходы через ноль? Являются ли ваши данные циклическими (например, 0 и 2π должны использовать один и тот же цвет)? Есть ли аналогия с такими стандартами, как синий / красный по температуре? Белый представляет NaN, никаких данных, или это будет использоваться в качестве основного момента? etcetc.

craq
источник
2

Для зрителей, страдающих дальтонизмом, CARTOColors предлагает качественную, дружественную к дальтонику схему Safe, основанную на популярных цветовых схемах Пола Тола . Эта палитра состоит из 12 легко различимых цветов.

Еще одна отличная качественная палитра, удобная для дальтоников, - это схема Окабе и Ито, предложенная в их статье «Цветной универсальный дизайн (CUD): как создавать рисунки и презентации, удобные для дальтоников».

### Example for R users
library(ggplot2)
library(rcartocolor)
library(patchwork)
theme_set(theme_classic(base_size = 14) + theme(panel.background = element_rect(fill = "#ecf0f1")))

set.seed(123)
df <- data.frame(x = rep(1:5, 8), 
                 value = sample(1:100, 40), 
                 variable = rep(paste0("category", 1:8), each = 5))

safe_pal <- carto_pal(12, "Safe")
palette_OkabeIto_black <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", 
                            "#0072B2", "#D55E00", "#CC79A7", "#000000")

# plot
p1 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_line(aes(colour = variable), size = 1) +
  scale_color_manual(values = palette_OkabeIto_black)


p2 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_col(aes(fill = variable)) +
  scale_fill_manual(values = safe_pal)

p1 / p2

Tung
источник