Рекомендации по цвету и толщине линий для линейных участков

31

Много было написано о выборе цвета, удобного для слепых, для карт, полигонов и заштрихованных областей в целом (см., Например, http://colorbrewer2.org ). Мне не удалось найти рекомендации по цветам линий и различной толщине линий для линейных графиков. Цели:

  1. легко различать линии, даже когда они переплетаются
  2. Линии легко различить по лицам с наиболее распространенными формами дальтонизма
  3. (менее важные) линии удобны для печати (см. выше «Цветовой пивовар»)

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

Было бы предпочтительно иметь рекомендации для до 10 кривых на одном графике. Еще лучше было бы сделать так, как это делает Color Brewer: позволить рекомендациям для m строк не быть подмножеством рекомендаций для n строк, где n> m, и варьировать m от 1 до 10.

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

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

В отсутствие других указаний я предлагаю использовать те же цвета, которые рекомендованы для многоугольников в colorbrewer2.org для линий, и умножить ширину линии на 2,5 для линий, нарисованных менее яркими / плотными цветами. Я создаю функцию R, которая устанавливает это. В дополнение к цветам пивовара, я думаю, я сделаю первые два цвета сплошным черным (тонкий) и серой шкалой (толстый), хотя можно утверждать, что они должны быть тонкими сплошным черным и тонким синим.

Функции R можно найти по адресу http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RConfiguration/Rprofile . Определив функцию, colBrewвы можете увидеть, как работают настройки, набрав

showcolBrew(number of line types)  # add grayscale=TRUE to use only grayscale

latticeSetТакже дается функция для установки latticeграфических параметров на новые настройки. Улучшения алгоритмов приветствуются.

Для изучения : dichromatпакет R : http://cran.r-project.org/web/packages/dichromat/

Фрэнк Харрелл
источник
2
Я бы подумал, что ограниченное количество типов линий будет очень полезным. Другой вариант, который, кажется, еще не упоминался, - это использование точечных маркеров для отдельных измерений, например, крестиков, нулей, звездочек и т. Д.
Роберт Джонс
1
Для меня точечные маркеры не полностью эффективны, когда кривые переплетаются. Но я видел несколько примеров, когда они работают очень хорошо.
Фрэнк Харрелл

Ответы:

21

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

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

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

Если, скажем, 2 или 3 серии, различить серии обычно не так уж сложно, и я бы предпочел использовать сплошные линии из двух или трех красных, синих или черных. Я также играл с оранжевым и синим, как использовал Хасти и его друзья (см. Ответ от @ user31264).

Изменяющийся рисунок линии (сплошная, пунктирная, пунктирная и т. Д.) Я нашел только в ограниченном значении. Пунктирные линии, как правило, стираются физически и умственно, а более тонкие комбинации точек и штрихов слишком тонкие (то есть незначительные) в отличие от того, чтобы быть успешными на практике.

Я бы сказал, что проблема кусается задолго до того, как у вас есть 10 серий. Если они не очень разные, 5 или около того серии могут быть слишком похожи на тяжелую работу, чтобы отличить их. Общая психология, по-видимому, заключается в том, что люди понимают принцип, согласно которому разные серии обозначаются разными цветами и / или символикой, но не имеют склонности усердно трудиться, чтобы проследить отдельные линии и попытаться рассказать историю об их сходствах и различиях в голове. , Частично это часто связано с использованием легенды (или ключа). Это спорно, но я попытаюсь обозначить различные серии на графике, где это возможно. Мой девиз здесь: «Потеряй легенду или убей ключ, если сможешь».

Я увлекся другим подходом к отображению нескольких временных рядов, в котором все разные временные ряды неоднократно отображаются на нескольких панелях, но на каждой выделяется отдельный. Это слияние одной старой идеи (а) маленьких кратных (как их называет Эдвард Туфте) и другой старой идеи (б), выделяющей серию, представляющую особый интерес. В свою очередь, это может быть просто еще одна старая идея, вновь открытая, но пока я могу найти только недавние ссылки. Больше в этой теме на Statalist .

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

Вот один эксперимент. Данные представляют собой урожаи зерна с 17 участков на полях Бродбалк в Ротамстеде 1852–1925 гг. И получены от Эндрюса Д.Ф. и Херцберга А.М. (ред.) 1985 года. Данные: набор проблем из многих областей для студента и научного сотрудника . Нью-Йорк: Springer, таблица 5.1 и может быть загружен из разных мест (например, введите описание ссылки здесь . (Подробно: данные там представлены блоками по 4 строки за каждый год; третья и четвертая строки - для выхода соломы, здесь не показаны). идентификаторы сюжета не указаны в этой таблице.)

У меня нет конкретных знаний по этому виду данных; Я просто хотел несколько временных рядов, которые нельзя (легко) отклонить как тривиально малые с точки зрения длины серии или количества панелей. (Если у вас есть сотни, тысячи, ... панелей, этот подход не может сильно помочь.) Я предполагаю, что аналитик данных, возможно, разговаривающий с экспертом по предметной области, может определить множество общих и необычное поведение здесь и получить понимание и информацию, таким образом.

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

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

Ник Кокс
источник
2
Я очень впечатлен сюжетом. Не могли бы вы включить несколько примеров выходных изображений прямо в ваш пост? Мне любопытно, насколько хорошо это работает, так как число строк варьируется, но это определенно самое удовлетворительное решение, которое я видел для ~ 10 строк
Silverfish
@Silverfish Спасибо за поддержку. Теперь добавлен один эксперимент.
Ник Кокс
1
Ник, я полностью согласен с «потерять ярлык» - минимизацией удаленных легенд - и с использованием выделения одной кривой за раз, позволяя другим тускнеть, как вы это сделали [вы можете быть почти так же эффективны, используя сплошной черный цвет для выделенной кривой] , Я думаю, что это отличная идея для презентаций, но она не настолько оптимальна для публикации статьи из-за нехватки места.
Фрэнк Харрелл
Возможно, интерактивные графики скоро станут более стандартными в публикации, и мы сможем наводить курсор на линии на графиках и получать больше информации (выделите целую линию или покажите подсказку, чтобы дать вам больше информации и т. Д.).
bdeonovic
1
@Frank Harrell Вопрос о космических укусах (1), если отдельные графические панели становятся слишком маленькими, чтобы их можно было прочитать, и в этом случае достоинства дизайна сомнительны; (2) если журналы или редакторы книг нельзя убедить выделить больше места для большей фигуры, чем обычно, если это кажется целесообразным. (Возможно, вы имели в виду другие моменты.)
Ник Кокс
14

На вопросы 2 и 3 вы ответили сами - цветовые палитры пивоваров подходят. Трудный вопрос - 1, но, как и Ник, я боюсь, что он основан на ложной надежде. Цвет линий - это не то, что позволяет легко различать линии, он основан на непрерывности и том, насколько извилистыми являются линии. Таким образом, существуют варианты, основанные на дизайне, отличные от цвета или штрихового рисунка линий, которые помогут облегчить интерпретацию графика.

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

#code adapted from http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RmS/rms.pdf page 40
library(Hmisc)
x <- rcspline.eval(seq(0,1,.01), knots=seq(.05,.95,length=5), inclx=T)
xm <- x
xm[xm > .0106] <- NA
x <- seq(0,1,length=300)
nk <- 6
set.seed(15)
knots<-seq(.05,.95,length=nk)
xx<-rcspline.eval(x,knots=knots,inclx=T)
for(i in 1:(nk1)){
  xx[,i]<-(xx[,i]−min(xx[,i]))/
  (max(xx[,i])−min(xx[,i]))
for(i in 1:20){
  beta<-2runif(nk1)−1
  xbeta<-xx%∗%beta+2runif(1)−1
  xbeta<-(xbetamin(xbeta))/
         (max(xbeta)−min(xbeta))
  if (i==1){
  id <- i
  MyData <- data.frame(cbind(x,xbeta,id))
  }
  else {
          id <- i
          MyData <- rbind(MyData,cbind(x,xbeta,id))
       }
  }
}
MyData$id <- as.factor(MyData$id)

Теперь это создает довольно запутанную путаницу из 20 строк, сложную задачу для визуализации.

library(ggplot2)
p1 <- ggplot(data = MyData, aes(x = x, y = V2, group = id)) + geom_line()
p1

Беспорядок линий

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

p2 <- p1 + facet_wrap(~id) + scale_x_continuous(breaks=c(0.2,0.5,0.8))
p2

Все 20 панелей

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

###############1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
newLevels <- c(1,1,2,2,2,2,2,1,1, 2, 3, 3, 3, 3, 2, 4, 1, 1, 2, 1)
MyData$idGroup <- factor(newLevels[MyData$id])
p3 <- ggplot(data = MyData, aes(x = x, y = V2, group = id)) + geom_line() + 
             facet_wrap(~idGroup)
p3

Уменьшенные панели

Есть общая фраза, которая применима к ситуации, если вы сосредотачиваетесь на чем-то, то вы сосредотачиваетесь ни на чем . В случае только с десятью линиями у вас есть (10*9)/2=45возможные пары линий для сравнения. Мы, вероятно, не заинтересованы во всех 45 сравнениях в большинстве случаев, мы либо заинтересованы в сравнении определенных линий друг с другом или в сравнении одной линии с распределением остальных. Ответ Ника хорошо показывает последнее. Достаточно будет нарисовать фоновые линии тонкими, светлыми и полупрозрачными, а затем нарисовать линию переднего плана любым ярким и толстым цветом. (Также для устройства не забудьте нарисовать линию переднего плана поверх других линий!)

Гораздо сложнее создать наслоение, в котором каждая отдельная линия может быть легко различима в путанице. Одним из способов достижения переднего и заднего плана в картографии является использование теней ( хороший пример приведен в этой статье Дэна Карра ). Это не будет масштабироваться до 10 строк, но может помочь для 2 или 3 строк. Вот пример траекторий на панели 1 с использованием Excel!

Excel Shadow

Есть и другие моменты, такие как светло-серые линии могут вводить в заблуждение, если у вас есть не гладкие траектории. Например, у вас может быть две траектории в форме X или две в форме одной правой стороны вверх и вверх V. Рисуя их одинаковым цветом, вы не сможете проследить линии, и поэтому некоторые советуют рисование параллельных координатных графиков с использованием плавных линий или дрожание / смещение точек ( Грэм и Кеннеди, 2003 ; Данг и др., 2010 ).

Таким образом, рекомендации по проектированию могут меняться в зависимости от конечной цели и характера данных. Но когда представляет интерес двумерное сравнение траекторий, я думаю, что кластеризация схожих траекторий и использование небольших кратных значений значительно упрощает интерпретацию графиков в самых разных обстоятельствах. Это, как мне кажется, в целом более продуктивно, чем любая комбинация цветов / штрихов на сложных графиках. Во многих статьях выделенные участки панелей намного больше, чем нужно, и разделение на 4 панели обычно возможно в пределах ограничений страницы без особых потерь.

Энди У
источник
3
Энди, это замечательно. Я действительно думаю, что для этого конкретного примера кривой сплайна было бы столь же эффективно или даже более эффективно назначить 5 цветов для 20 линий, чтобы кривые, расположенные ближе друг к другу, были назначены другим цветам. Нет единой метрики расстояния, которая всегда будет работать, но обычно есть метрика, которая работает для данной ситуации. Как вы сказали, все это зависит от гладкости и извилистости.
Фрэнк Харрелл
5

Из «Элементов статистического обучения» Тревора Хасти и соавт. :

«Наше первое издание было неприемлемо для дальтоников, в частности, мы предпочитали контрасты красного / зеленого цвета, что особенно проблематично. Мы в значительной степени изменили цветовую палитру в этом издании, заменив вышеприведенный контраст оранжево-синим. "

Вы можете посмотреть на их графики.

Вы также можете использовать пунктирные, пунктирные и т. Д. Линии.

user31264
источник
4

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

Некоторые ресурсы:

  1. Хэдли Уикхэм (2009), ggplot: Элегантная графика для анализа данных , Springer; имеет поддерживающую веб-страницу
  2. 8 рекомендуемых книжных ресурсов по визуализации данных: http://www.tableausoftware.com/about/blog/2013/7/list-books-about-data-visualisation-24182

Некоторые курсы:

  1. Графическая лекция в курсе « Вводные вычисления для биостатистики» Томаса Ламли
  2. Аспирантура Росса Ихака по вычислительному анализу данных и графике
  3. Бакалавриат Росса Ихаки по визуализации информации
  4. Бакалавриат Деборы Нолан Концепции в области вычислений с данными
  5. Курс визуализации данных Хэдли Уикхема
bdeonovic
источник
7
Это отличный список ресурсов. Тем не менее, есть ли какие-либо конкретные рекомендации, о которых вам известно - из одной или нескольких из них - которые относятся к вопросу (толщина линий, с цветными линиями, где может быть много линий), которые вы могли бы кратко упомянуть?
Glen_b
Я позволил себе отформатировать ваш пост. Я думаю, что это помогает увидеть структуру. Если вам это не нравится, отбросьте его с моими извинениями.
gung - Восстановить Монику
2

Хотя я согласен, что не существует единственного решения проблемы, я использую рекомендации этого блога:

http://blogs.nature.com/methagora/2013/07/data-visualization-points-of-view.html

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

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

Хороший набор цветов для этой цели - синий и оранжевый (классика!). Вы можете сделать тест, применив дальтоник и серый фильтры, и посмотрите, сможете ли вы заметить разницу.

Что касается толщины линий, некоторые из упомянутых ранее проблем блога посвящены этой теме. Линии, если их много, должны иметь одинаковую толщину, то есть «тонкие». Используйте толстые линии, только если вы хотите привлечь внимание к этому объекту.

chuse
источник
1
Я не полностью согласен с «Используйте только толстые линии ...». Толстые светло-серые линии могут быть очень эффективными во многих случаях.
Фрэнк Харрелл
1
Это может быть обязательно. Я просто имел в виду, что если вы используете привлекательный стиль, его следует использовать с определенной целью.
chuse