引子
有一数据集如下:
数据解读:
- 研究对象的目标层 A 分为 B1, B2, B3 三个准则层;
- B1 层下有 C1, C2, C3, C4 4个指标;
- B2 层下只有 C5 一个指标;
- B3 层有 C6, C7, C8 3个指标。
- 指标权重是该指标在所属准则层的权重;
- 组合权重是该指标在目标层的权重。
现在,要绘制上述数据的“组合权重”的饼图。如何给这个饼图配色呢?
数据可视化配色的误区
下图是群友绘制的图:
他自己对结果不满意,他认为是颜色搭配太丑。
我们来看看,他的配色问题出在哪:
颜色太乱,用8种颜色代表8个指标,除了添乱以外,没有一点好处,实际上,标签 C1, C2,… 已经表达了指标信息,再用颜色表达指标是“资源”的浪费!
这是一组分层、定性分类的数据,从图中,我们无法看出指标与准则的归属(分类)关系,所以显得很乱!
颜色没有帮助表达更多有用的数据信息。
初学者,对数据可视化的配色常有一个的误解:认为配色就是给图表着上颜色,看起来花哨,好看!非也,非也!
数据可视化配色的目的
数据可视化的目的是为了更直观的表达数据之间的关系、数据的结构、作者发现的数据变化的规律、表达作者发现的数据中隐含的信息…
简单说,数据可视化就是用图表表达作者在数据中发现的重要信息。
图表类型、符号、颜色是有限的、宝贵的“表达”资源,使用时都应该是有助于这个目的。用多个资源重复表达相同的信息,肯定是失败的。
数据可视化的配色如果仅是为了好看,99% 会是失败的。
实例讨论配色的思路
我们就前面这个简单的例子,来看看配色的一般思路。
选择合适的颜色映射
考虑到:
- 该数据集有 3 个准则层,每个准则层下的有 4, 3 ,1个指标不等。
- 显然这种准则层、指标层,是一种定性的(qualitative)分类;
- 饼图的标签已足以区分准则层、指标层;
- 饼图的锲形大小已表达权重;
- 用颜色表达准则层的分类、表达指标与准则层的关系,是一个不错的选择。
观察 matplotlib 内置的 qualitative colormaps,发现 ’tab20b, tab20c‘与这个数据集的结构比较吻合。
比如, tab20c 前面3个颜色,蓝色、橙色、绿色,每个颜色下面有 4 个饱和度变化。
我们用蓝色、橙色、绿色表达 3 个准则层,用对应颜色下面的饱和度变化表达所属的指标层,怎么样?应该不错。
按照这个思路绘制的嵌套饼图如下:
看到这个图,读者即使不看原始数据,也应该想到:
- C1,C2,C3,C4 与 B1 层有关;
- B2 层似乎只有一个 C5;
- C6,C7, C8 应该属于 B3 层。
至于颜色搭配的协调性,matplotlib 内置的颜色映射已经做了保证。记住:各种配色模块定义颜色板的首要目的就是基于色彩搭配的原理,保证这些颜色放在一个图表中的协调和美观。
我们的工作就是选择合适的颜色映射表达数据中的信息。
就这个例子,你可能有更好的配色方案,欢迎到python草堂群:457079928(QQ群)交流。