是否已进行过研究,以便在同一图上显示多个系列的最佳颜色是什么?我一直在使用中的默认值matplotlib
,因为它们都是明亮的原色,所以它们看起来有点幼稚。
是否已进行过研究,以便在同一图上显示多个系列的最佳颜色是什么?我一直在使用中的默认值matplotlib
,因为它们都是明亮的原色,所以它们看起来有点幼稚。
Answers:
选择调色板的常见参考是Cynthia Brewer在ColorBrewer上的工作。颜色是根据Choropleth映射中的感知模式选择的,但是大多数相同的建议适用于在任何类型的图中使用颜色来区分数据模式。如果仅用颜色来区分不同的线条,则必须使用定性调色板。
在只有几条线的线图中,通常不需要颜色,并且不同的点符号和/或虚线图案足够有效。线图的一个更常见的问题是,如果线频繁重叠,则无论您使用什么符号或颜色,都很难区分不同的图案。斯蒂芬·科斯林(Stephen Kosslyn)建议一般的经验法则是在一个图中只包含4行。如果您有更多考虑,请考虑将线分成一系列小的多重绘图。这是显示建议的示例
不需要颜色,标签也绰绰有余。
在其他答案中,很多非常出色的好建议,但是这里有一些我自己对学生的低级建议。考虑到以下关键问题,自然而然地这只是建议:我的图形打算做什么?这些数据有什么意义?谁是读者群?我期望颜色在图表中做什么?无论其他人的教条如何,该图是否都能正常工作?
此外,颜色的重要性从一个图形到另一个图形变化很大。对于Choropleth或小块贴图,其中的想法确实是不同区域的颜色或阴影至少不同,图的成功与其配色方案的成功紧密相关。对于其他种类的图形,颜色可能是不必要的,甚至是令人讨厌的。
需要所有颜色吗?例如,如果在图形的不同区域中通过文本标签清楚地区分了不同的变量或组,那么单独的颜色也常常会被淘汰。当心水果沙拉或五颜六色的梦境效果。例如,对于在文本上或在文本切片上带有文本标签的饼图,颜色不会传达额外的信息。(如果饼图取决于键或图例,则您可能正在尝试使用错误的图形。)
切勿依靠红色和绿色之间的对比,因为许多人都难以区分这些颜色。
彩虹序列(ROYGBIV或红-橙-黄-绿-蓝-靛蓝-紫)可能会吸引身体,但在实践中效果不佳。例如,黄色通常是较弱的颜色,而橙色和绿色通常更强,因此印象甚至不是单调的序列。
避免使用任何会引起强烈的大色块的配色方案。
当需要有序序列时,从深红色到深蓝色的序列效果很好。如果白色(通常)是任何地方的背景颜色,请不要使用它,而应从浅红色跳到浅蓝色。[2018年3月1日新增]可能太明显了,无法强调:红色对许多人来说具有消极和/或危险的含义,这可能会有所帮助,而蓝色可能意味着积极的含义。下划线太明显了,但我可以做任何事情:红色和蓝色在许多国家中确实具有政治含义。
蓝色和橙色相处得很好(在此感谢Hastie,Tibshirani和Friedman的致意:http ://web.stanford.edu/~hastie/local.ftp/Springer/OLD/ESLII_print4.pdf )[2018年3月1日添加]许多现在,有关可视化的入门书籍推荐橙色,蓝色和灰色作为基本调色板:橙色和/或蓝色代表您关心的内容,灰色代表背景。
从浅灰色到深灰色的灰度可以很好地工作,并且在无法进行色彩还原时是个好主意。(这是一台糟糕的打印机,无法在灰度级上进行漂亮的打击。)(如果您愿意,则为灰色;看起来喜好在整个海洋中都在变化;就像颜色和颜色一样。)
[2016年8月5日添加]一个相当普遍的原则是,两种颜色通常比许多颜色要好得多。如果两组都感兴趣,则选择同样强烈的颜色(例如红色或橙色和蓝色)。如果其中一组特别受关注,则将其设置为蓝色或橙色,然后将其他设置为灰色。原则上将7种颜色用于7组可以承载信息,但是即使在与其他几种颜色竞争的情况下,也很难集中于一种颜色。对于多个组而言,小倍数可能比多色图更好。
近年来,实际上对此进行了大量研究。
重点是“语义共鸣”。从根本上讲,这意味着“与它们代表的颜色相对应的颜色”,例如,至少对于美国的受众而言,金钱的时间序列应涂成绿色。这显然提高了理解力。Lin等人(2013)撰写了一篇有关该主题的非常有趣的论文:http : //vis.stanford.edu/papers/semantically-resonant-colors
在http://tools.medialab.sciences-po.fr/iwanthue/上还有一个非常不错的iWantHue颜色生成器,其他选项卡中有很多信息。
Lin,Sharon,Julie Fortuna,Chinmay Kulkarni,Maureen Stone和Jeffrey Heer。(2013)。选择语义共振的颜色以进行数据可视化。计算机图形学论坛(Proc。EuroVis),2013年
Paul Tol在其网站上提供了针对色差(即分类或定性数据)和色盲视觉优化的配色方案,并在与该链接相关的“技术说明”(PDF文件)中提供了详细信息。他说:
为了尽可能清晰地显示具有科学结果的图形,可以方便地使用以下调色板:
- 适合所有人,包括色盲读者;
- 有别于黑白
- 在屏幕和纸张上截然不同;和
- 仍然搭配得很好。
我从他的“调色板1”中选择了9种最明显的颜色,然后将其放在我的matplotlibrc
文件下axes.color_cycle
:
axes.color_cycle : 332288, 88CCEE, 44AA99, 117733, 999933, DDCC77, CC6677, 882255, AA4499
然后,从Joe Kington的答案中借用以下默认线:
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()
结果是:
对于发散色图(例如,表示标量值),我见过的最好的参考文献是肯尼思·莫兰德(Kenneth Moreland)的论文,可在此处找到“发散色图以实现科学可视化 ”。他开发了冷暖方案来代替Rainbow方案,并“提出了一种算法,可以使用户轻松生成自己的自定义颜色图”。
关于在科学可视化中使用颜色的信息的另一个有用资源来自罗伯特·西蒙(Robert Simmon),他为NASA创建了“蓝色大理石”图像。在地球观测网站上查看他的系列文章。
在colorbrewer2.org你可以找到定性的,连续的和发散的配色方案。定性最大化了连续颜色之间的差异,这就是我在gnuplot中使用的颜色。该站点的优点是您可以轻松复制颜色的十六进制代码,以便轻松导入。例如,我正在使用以下8色设置:
#e41a1c
#377eb8
#4daf4a
#984ea3
#ff7f00
#ffff33
#a65628
#f781bf
这是令人愉快的,并产生清晰的结果。
附带说明一下,当您需要平滑的坡度时,使用顺序;当您需要突出与中心值的差异(例如,山高和海深)时,请使用发散。您可以在此处阅读有关这些配色方案的更多信息。
有很多致力于选择调色板的网站。我不知道有特定的一组客观上最好的颜色,您将不得不根据听众和作品的色调来选择。
请访问http://www.colourlovers.com/palettes或http://design-seeds.com/index.php/search以开始使用。其中一些具有接近两种颜色来显示不同的组,但是其他一些则可以在更大范围内为您提供互补色。
您还可以在Matplotlib中签出非默认的预定义颜色集。
我喜欢来自colorbrewer的Dark2调色板用于散点图。我们在ggobi图书www.ggobi.org/book中使用了此功能。但是除此之外,调色板是针对地理区域而不是数据图的。对于基于点的图,良好的颜色选择仍然是一个问题。
R软件包colorspace
和dichromat
有用。colorspace
可以选择方向盘周围的颜色:您可以花数小时/天进行微调。dichromat
帮助检查色盲。
ggplot2
通常具有良好的默认值,尽管不一定需要色盲证明。
从红色到蓝色的方案在您的计算机上看起来不错,但投影效果不好。
绘制线条时,应注意绿色和黄色,它们在投影仪上不能很好地显示。由于我最终会在演示文稿中重复使用大部分绘图,因此即使原本打算用于屏幕或纸质出版物,我也避免使用这些颜色。
为了保持高对比度,我需要使用黑色,红色,蓝色,洋红色,青色,如果我真的需要它,可以使用灰色。实际上,其中大多数是明亮的原色或中间色。我知道从美学角度来看这可能不是最佳选择,但我对所呈现内容的清晰度更感兴趣。另一方面,从美学角度来看,始终如一地重用有限调色板中的相同颜色可能是一件好事。
如果使用的线条多于6条,则说明您要填满更多空间,并倾向于绘制彩色块。对于此类情节,我认为每种情况都需要单独考虑。您是否要突出极端或过零?您的数据是周期性的吗(例如0和2π应该使用相同的颜色)?是否有类似于温度的标准,例如蓝色/红色?白色代表NaN,没有数据,还是将其用作突出显示?等
对于色盲观看者来说,CARTOColors有一个定性的色盲友好方案Safe
,该方案基于Paul Tol流行的色彩方案。此调色板包含12种易于区分的颜色。
另一种优质的色盲友好调色板是Okabe和Ito方案,他们在其文章“通用颜色设计(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