线图的颜色和线宽建议


31

通常,已经有很多关于地图,多边形和阴影区域的色盲友好颜色选择的文章(例如,参见http://colorbrewer2.org)。我无法找到有关线颜色和线图变化线宽的建议。目标是:

  1. 容易区分线,即使它们缠绕在一起
  2. 带有色盲最常见形式的个人容易区分线条
  3. (不太重要)行是易于打印的(请参见上面的Color Brewer)

在黑色和灰度线的背景下,我发现具有细的黑色线和较粗的灰度线非常有效。我会特别推荐一些建议,包括各种颜色,灰度等级和线条粗细。我不喜欢各种线型(实线/虚线/虚线),但可以不接受这种观点。

最好在一张图表上建议多达10条曲线。更好的做法是像Color Brewer一样:允许m行的建议不成为n行m的n行建议的子集,并且将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图形参数到新的设置。欢迎对算法进行改进。

探索:R dichromat包:http//cran.r-project.org/web/packages/dichromat/


2
我本以为数量有限的线型将非常有帮助。这似乎并没有一直没有提到另一种选择,就是利用个人测量,例如,十字架,零,星号等点标记的
罗伯特·琼斯

1
对我而言,曲线交织时点标记并不完全有效。但是我已经看到了几个很好地工作的例子。
Frank Harrell 2014年

Answers:


21

在这里,我将尝试进行挑衅,并想知道是否存在缺少此类准则的问题,因为这几乎是无法解决的问题。在完全不同的领域中的人们似乎经常谈论“意大利面条图”以及他们在区分不同系列时所遇到的问题是同意的。

具体而言,用于几个单独时间序列的大量行可以共同传达一般模式,有时还可以传达不同于任何此类模式的单独序列。

但是,我要考虑的是,当它们具有您关心的身份时,区分所有单个时间序列。

如果您说2或3系列,区分系列通常不太难,而我倾向于使用红色,蓝色或黑色中的两个或三个实线。我还玩过Hastie和朋友使用的橙色和蓝色(请参阅@ user31264的答案)。

我发现改变线型(实线,虚线,点线等)仅具有有限的价值。虚线往往会在生理和心理上被冲掉,而点和破折号的更微妙的组合则太微妙了(意思是轻微),相反在实践中却无法成功。

我想说这个问题早在您拥有10个系列之前就已经解决了。除非它们之间有很大差异,否则5个左右的序列可能很难区分。普遍的心理似乎是人们很好地理解了不同的系列以不同的颜色和/或象征来表示的原理,但缺乏去努力寻找单个线条并试图保留一个关于它们的异同的故事的倾向。 。部分原因通常来自图例(或键)的使用。这是有争议的,但是我会尽量在图表上标记不同的序列。我的座右铭是“丢掉传说,或者如果可以的话,杀死钥匙”。

我喜欢使用一种不同的方法来显示多个时间序列,在该方法中,所有不同的时间序列都在多个面板中重复显示,但是每个面板中都突出显示了一个不同的时间序列。这是一个旧想法(a)小倍数(如Edward Tufte所称)的融合,另一个是旧想法(b)融合了一系列特殊兴趣的融合。反过来,可能只是重新发现了另一个旧的想法,但到目前为止,我只能找到最近的参考。有关Statalist的更多信息

在颜色方面,我很积极地将灰色用于时间序列,将其作为强调重点的背景。这似乎与大多数值得发表的期刊是一致的。

这是一个实验。数据是1985年在Rothamsted 1852-1925的Broadbalk田地上的17个地块的谷物产量,来自DF的Andrews和AM(编辑)1985年的Herzberg。数据:学生和研究人员从许多田里收集的问题。纽约:施普林格,表5.1,可从不同地方下载(例如,在此处输入链接描述。(详细信息:那里的数据每年以4行为单位输入;第3行和第4行用于稻草产量,此处未作图。)图表标识符在该表中不明确。)

我没有这类数据的专门知识;我只是想要一个多个时间序列,就序列长度或面板数而言,它不能(轻易)被视为很小。(如果您有成百上千个小组,这种方法实际上并没有太大帮助。)我在想象的是,一位数据分析师(也许与主题专家交谈)可以识别出各种常见的问题。在这里罕见的行为,从而获得见识和信息。

在此处输入图片说明

显然,该配方可用于许多其他类型的图(例如,散点图或直方图,每个子集依次突出显示);根据一些有趣或有用的度量或标准(例如,按中位数或第90个百分位数或SD)与订购面板一起使用;以及模型结果和原始数据。


2
我对subsetplot印象深刻。您能否将一些示例输出图像直接包含在帖子中?我很好奇它随着行数的变化如何工作,但这绝对是我见过的最令人满意的解决方案,适用于大约10条线
Silverfish

@Silverfish感谢您的鼓励。现在添加了一个实验。
尼克·考克斯

1
尼克·我完全同意“丢掉标签”-最小化远程图例-并一次突出显示一条曲线,让其他曲线像您一样变暗[对于突出显示的曲线,使用纯黑效果几乎一样有效] 。我认为这对于演示文稿是个好主意,但由于篇幅所限,对于发布论文而言并不是最佳选择。
Frank Harrell 2014年

也许交互式绘图将很快成为出版中的标准,我们将能够将鼠标悬停在绘图中的行上并获得更多信息(突出显示整行或显示工具提示以提供更多信息等)。
bdeonovic 2014年

1
@弗兰克·哈雷尔(Frank Harrell)空间咬住的问题(1)如果单个图形面板变得太小而无法阅读,在这种情况下,设计的优点是可疑的;(2)如果不能说服期刊或书籍编辑者为更大的数字分配更多的空间,则这似乎是值得的。(也许您还有其他要点。)
Nick Cox 2014年

14

您回答了自己的问题2和3-酿造啤酒的调色板很合适。困难的问题是1,但是像尼克一样,我担心这是基于错误的希望。线条的颜色并不是使人们能够轻松区分线条的原因,它是基于连续性和线条的曲折性。因此,除了线条的颜色或虚线图案之外,还有基于设计的选择,这些选择将有助于使图形更易于解释。

我将窃取Frank的其中一个图,该图显示样条线的灵活性,以在有限的区域内近似许多不同形状的函数。

#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个面板

斯蒂芬·科斯林(Stephen Kosslyn)在书中提出的观点是,绘制情节并不是因为有多少不同的线条而变得复杂,而是线条可以采用多少种不同类型的形状。如果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个比较都不感兴趣,或者对特定的行之间进行比较,或者对其余行的分布进行比较感兴趣。尼克的回答很好地显示了后者。绘制细,浅色和半透明的背景线,然后以任何亮色或更粗的方式绘制前景线就足够了。(对于设备,请确保在其他线条上方绘制前景线条!)

要创建一个层次,使每个单独的线条都可以轻松地在纠缠中进行区分,要困难得多。在制图学中实现前景与背景区分的一种方法是使用阴影(有关示例,请参见Dan Carr的本文)。这不会扩展到10行,但可以帮助2或3行。这是使用Excel的Panel 1中的轨迹的示例!

Excel阴影

还有其他要点,例如,如果您的轨迹不平滑,则浅灰色的线条可能会误导您。例如,您可能有两个形状为X的轨迹,或者两个形状分别为右侧和上下V的轨迹。将它们绘制为相同的颜色将无法绘制线条,这就是为什么有些人建议使用平滑线或抖动/偏移点绘制平行坐标图(Graham和Kennedy,2003Dang等,2010)。

因此,设计建议可以根据最终目标和数据的性质而变化。但是,当在轨迹之间进行二元比较时,我认为相似轨迹的聚类和使用小的倍数使图在各种情况下都更易于解释。我觉得通常比在复杂的绘图中将颜色/线破折号组合起来要更有生产力。许多文章中的单个面板图远大于其所需的大小,并且通常可以在页面约束内将面板分成4个面板而不会造成太大损失。


3
安迪,这太好了。我确实认为,对于这个特定的样条曲线示例,将5种颜色分配给20条线将是同样有效,甚至更为有效,以便使靠近在一起的曲线分配不同的颜色。没有一个距离度量标准将始终有效,但是通常存在一种适用于给定情况的度量标准。正如您所说,这一切都取决于平滑度和曲折度。
Frank Harrell 2014年

5

摘自Trevor Hastie等人的“统计学习的要素”。:

“我们的第一版对色盲读者不友好;特别是,我们倾向于偏爱特别麻烦的红色/绿色对比。我们已在此版本中大大改变了调色板,用橙色/蓝色对比替代了上面的调色板。 ”

您可能想看看他们的图表。

您也可以使用虚线,虚线等。


4

在适当的数据可视化方面,我很少注意到“线宽”。辨别不同线条粗细的能力也许不如辨别颜色的可变性。

一些资源:

  1. Hadley Wickham(2009),ggplot:用于数据分析的优雅图形,施普林格(Springer);有一个支持网页
  2. 关于数据可视化的8本书建议资源:http : //www.tableausoftware.com/about/blog/2013/7/list-books-about-data-visualisation-24182

一些课程:

  1. Thomas Lumley的生物统计学入门计算课程中的图形讲座
  2. Ross Ihaka的计算数据分析和图形研究生课程
  3. Ross Ihaka的信息可视化本科课程
  4. Deborah Nolan的本科课程“数据计算概念”
  5. Hadley Wickham的数据可视化课程

7
那是很多资源。但是,您有没有从某个或多个中了解到与该问题相关的任何具体建议(线的粗细,有色线,可能有很多线),您可以简要提及一下吗?
Glen_b-恢复莫妮卡2014年

我采取了格式化您的帖子的自由。我认为这样更容易看到结构。如果您不喜欢它,请向我道歉。
gung-恢复莫妮卡

2

虽然我同意没有唯一的解决方案,但是我使用了此博客的建议:

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

有关颜色的帖子解决了色盲和灰度打印的问题,并提供了解决这两个问题的色标示例。

在同一篇文章中,还分析了连续色标,连续色标通常用于热图等。建议不要使用彩虹,因为有一些尖锐的过渡(例如黄色区域,比红色小得多)。相反,可以在其他颜色对之间进行转换。

为此目的,很好的颜色是蓝色和橙色(经典!)。您可以通过应用色盲和灰色滤镜进行测试,看看是否仍然可以注意到差异。

对于线条的粗细,前面提到的博客的一些问题涉及到这一点。线条(如果有很多)应该具有相同的粗细,即“细”。仅当您要引起注意该对象时,才使用粗线。


1
我完全不同意“仅使用粗线...”。在许多情况下,粗的浅灰色线条可能非常有效。
Frank Harrell

1
可以肯定的。我的意思是,如果您使用醒目的样式,则应有目的地使用它。
选出
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.