Python数据可视化配色全攻略:从Matplotlib到Plotly的色彩应用与实战
1. 项目缘起:为什么我们需要一份Python作图颜色指南
如果你用Python做过图,尤其是用过Matplotlib、Seaborn或者Plotly这类库,大概率经历过这样的时刻:想给图表换个颜色,结果在搜索引擎里输入“matplotlib color”,然后在一堆英文文档、Stack Overflow的零散回答和颜色代码对照表里翻来覆去地找。最后可能随便选了个‘blue’或者‘red’,或者复制了一段‘#FF5733’这样的十六进制码,但心里并不确定这是不是最合适、最好看的那个选择。
这就是我写这篇汇总的初衷。颜色在数据可视化里,远不止是“好看”那么简单。它承担着区分数据系列、突出关键信息、传达数据属性(如正负、冷热)、甚至引导观众情绪和注意力的重任。一个糟糕的配色方案,能让清晰的数据变得混乱不堪;而一个精心设计的配色,则能让你的图表专业度和说服力提升好几个档次。
网上关于Python颜色的资料很多,但往往要么太零散(只讲某个库的某个函数),要么太理论(大谈色彩空间原理),要么就是一份冰冷的颜色名列表,缺乏上下文和实战指导。我希望通过这篇汇总,能帮你把Matplotlib、Seaborn、Plotly这几个主流库的颜色使用方式彻底理清,从最基本的颜色名称和代码,到高级的渐变色(Colormap)应用,再到如何根据场景选择配色方案,形成一个完整、可直接“抄作业”的知识体系。无论你是刚入门的新手,还是想优化图表的老手,这篇文章都能给你提供即查即用的参考。
2. 颜色基础:理解Python中的颜色表示法
在深入各个库之前,我们必须统一语言,理解Python作图库是如何“认识”颜色的。这就像学画画先认识颜料,是后续一切操作的基础。
2.1 四种核心的颜色指定方式
几乎所有Python可视化库都支持以下四种方式指定一个具体的颜色:
1. 颜色名称字符串这是最直观的方式。Matplotlib内置了一个丰富的颜色名称字典,你可以直接使用像‘red’,‘green’,‘blue’,‘cyan’,‘magenta’,‘yellow’,‘black’,‘white’这样的英文单词。此外,它还支持一些更具体的名称,如‘skyblue’,‘lightcoral’,‘darkorange’等。
# 示例:使用颜色名称 plt.plot(x, y, color='steelblue') # 线条颜色设为钢蓝色 plt.scatter(x, y, c='coral') # 散点颜色设为珊瑚色注意:颜色名称是大小写不敏感的,但建议使用全小写以保证兼容性。你可以通过
matplotlib.colors.cnames这个字典查看所有可用的颜色名及其对应的十六进制码。
2. 十六进制字符串这是Web设计和CSS中广泛使用的格式,格式为‘#RRGGBB’或‘#RRGGBBAA’。RR、GG、BB分别代表红、绿、蓝通道的十六进制值(00-FF),AA代表透明度Alpha通道(00-FF,可选)。这种方式可以表达极其丰富的颜色。
# 示例:使用十六进制颜色 color_hex = '#2E8B57' # 一种海绿色 color_hex_with_alpha = '#FF450080' # 橙红色,50%透明度 (80/FF ≈ 0.5)3. RGB或RGBA元组用0到1之间的浮点数来表示每个颜色通道的强度。(R, G, B)表示RGB,(R, G, B, A)表示RGBA(A为透明度,0为完全透明,1为完全不透明)。
# 示例:使用RGB/RGBA元组 color_rgb = (0.1, 0.5, 0.8) # 一种蓝绿色 color_rgba = (0.9, 0.2, 0.2, 0.6) # 一种红色,60%不透明度这是程序化生成颜色时非常有用的一种方式,例如在一个循环中根据索引计算颜色。
4. 灰度字符串当只需要黑白灰时,可以用一个代表灰度的字符串,格式是‘0.x’的字符串,或者直接是‘x’(x为0-1的数字字符串)。‘0.0’是黑色,‘1.0’是白色,‘0.5’是中灰色。
# 示例:使用灰度 plt.bar(labels, values, color='0.7') # 浅灰色的柱状图2.2 颜色映射(Colormap)初探
当我们需要用颜色表示一个连续变量的值(比如温度、海拔、密度)时,单一颜色就不够用了,我们需要一个从A颜色渐变到B颜色的“颜色条”,这就是颜色映射(Colormap,简称cmap)。在Matplotlib体系中,它是一个将数据归一化到[0, 1]区间后,映射到一组RGBA颜色的对象。
import matplotlib.cm as cm # 获取‘viridis’颜色映射对象 cmap = cm.get_cmap('viridis') # 将数值0.5映射为颜色 color_at_mid = cmap(0.5)在绘图函数中,我们通常直接将颜色映射的名字字符串传给cmap参数,库会自动完成映射。这是科学可视化中最重要的概念之一,我们会在第4章详细展开。
3. 实战库解析:Matplotlib, Seaborn, Plotly的颜色使用
了解了颜色的“单词”(表示法),接下来我们学习如何在不同的“语境”(作图库)中组织它们形成优美的“句子”(图表)。
3.1 Matplotlib:基础而强大的调色板
Matplotlib是Python绘图的基石,其颜色系统最为基础和全面。
单色控制在plot,scatter,bar等函数中,主要通过color(或c,在scatter中) 参数来控制颜色。
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) y = np.sin(x) fig, ax = plt.subplots() # 为不同的线条指定不同的颜色 ax.plot(x, y, color='indigo', label='Line 1', linewidth=2) ax.plot(x, y*0.8, color=(0.2, 0.7, 0.3), label='Line 2', linestyle='--') # 使用RGB元组 ax.plot(x, y*0.6, color='#FF8C00', label='Line 3') # 使用十六进制 ax.legend() plt.show()多系列颜色的自动化:属性循环器当你在一个坐标系中绘制多条线或多个柱状图组时,手动指定每个颜色很麻烦。Matplotlib使用“属性循环器”来自动分配颜色。默认情况下,它会循环使用‘C0’,‘C1’, …‘C9’这10种颜色。
for i in range(5): # 不需要指定color,自动使用C0, C1, C2... plt.plot(x, y + i, label=f'Line C{i}')你可以通过ax.set_prop_cycle()来定制这个循环器,注入你喜欢的颜色列表。
from cycler import cycler custom_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd'] custom_cycler = cycler(color=custom_colors) ax.set_prop_cycle(custom_cycler)实操心得:
‘C0’到‘C9’是Matplotlib 2.0后引入的“Tableau”调色板颜色,在区分度、美观度和色盲友好性上做了平衡,是默认的绝佳选择。除非有特殊品牌或出版要求,否则建议优先使用它们。
3.2 Seaborn:基于统计美学的高级封装
Seaborn在Matplotlib之上,提供了更高级的统计图形和精美的默认样式。它的颜色系统核心是“调色板”。
设置与使用调色板seaborn.color_palette()函数是核心。你可以获取一个颜色列表,然后将其设置为当前上下文的颜色循环。
import seaborn as sns import matplotlib.pyplot as plt # 获取一个‘husl‘调色板的6种颜色 palette = sns.color_palette("husl", 6) print(palette) # 输出是一个RGB元组列表 # 将其设置为Matplotlib的颜色循环 sns.set_palette(palette) # 现在绘图就会使用这个调色板了 for i in range(6): plt.plot([0, 1], [i, i], linewidth=4) plt.show()Seaborn内置的调色板类型
- 定性调色板:用于区分没有顺序关系的分类数据。这是最常用的。
‘deep’,‘muted’,‘bright’,‘pastel’,‘dark’,‘colorblind’:Seaborn的默认六套调色板,‘deep’是默认。‘Set1’,‘Set2’,‘Set3’,‘tab10’,‘tab20’:来自ColorBrewer和Matplotlib的经典分类色板。‘husl’,‘hls’:在HSL色彩空间中均匀选取的颜色,区分度极好。
- 顺序调色板:用于表示从低到高有序的数值数据。本质就是单色渐变的颜色映射。
‘rocket’,‘mako’,‘crest’,‘flare’:Seaborn自带的现代渐变色,非常漂亮。‘viridis’,‘plasma’,‘inferno’,‘magma’,‘cividis’:Matplotlib的感知均匀颜色映射,是科学可视化的黄金标准。‘Blues’,‘Greens’,‘Reds’,‘Oranges’,‘Purples’:单色渐变,名字直观。
- 发散调色板:用于表示有中间值(如零值)和两个方向极值的数据(如正负温度偏差)。
‘vlag’,‘icefire’:Seaborn自带的发散色。‘RdBu’,‘PiYG’,‘PRGn’,‘BrBG’,‘PuOr’:经典的“红-蓝”、“紫-绿”等发散调色板。
你可以用sns.color_palette(‘调色板名称‘, n_colors=数量)来获取指定数量的颜色列表,或者用sns.palplot(sns.color_palette(‘调色板名称‘))来快速可视化一个调色板。
在绘图函数中直接使用许多Seaborn绘图函数有palette参数,可以直接传入调色板名称。
tips = sns.load_dataset("tips") # 使用‘Set2‘调色板为不同的‘day‘分类着色 sns.boxplot(x="day", y="total_bill", hue="sex", data=tips, palette="Set2") plt.show()踩坑提醒:Seaborn的
set_palette()或set_style()会改变全局的Matplotlib绘图参数。如果你在同一个Notebook或脚本中混合使用Seaborn和纯Matplotlib,并且希望它们风格独立,最好使用with sns.color_palette(‘palette_name‘):上下文管理器,或者在每个Seaborn绘图函数中单独指定palette参数,避免全局设置带来意外影响。
3.3 Plotly:交互式图表的动态色彩
Plotly(特别是plotly.express)以其声明式和交互式著称,颜色系统同样强大且易于使用。
离散颜色映射对于分类数据,使用color_discrete_sequence参数。它可以接受一个Plotly认可的颜色名称列表、十六进制列表或RGB字符串列表。
import plotly.express as px df = px.data.iris() # 使用Plotly内置的定性色板‘Set1‘ fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species', # 根据物种分类着色 color_discrete_sequence=px.colors.qualitative.Set1) fig.show()px.colors.qualitative模块下包含了大量优秀的定性调色板,如Plotly,D3,G10,T10,Set1,Set2,Set3等。
连续颜色映射对于数值数据,使用color_continuous_scale参数。它接受一个颜色映射名称或自定义的颜色列表。
# 使用顺序色板‘viridis‘ fig = px.scatter(df, x='sepal_width', y='sepal_length', color='petal_length', # 根据花瓣长度(连续值)着色 color_continuous_scale='viridis') fig.show() # 使用自定义的从蓝到红的三色渐变 custom_scale = ['blue', 'white', 'red'] fig = px.scatter(df, x='sepal_width', y='sepal_length', color='petal_length', color_continuous_scale=custom_scale)px.colors.sequential模块下包含了所有顺序颜色映射,如Viridis,Plasma,Hot,Blues等。px.colors.diverging模块下则是发散颜色映射。
设置颜色轴和颜色条Plotly的交互优势在这里体现:你可以轻松设置颜色轴的标题、范围,以及颜色条的位置和标题。
fig.update_coloraxes(colorbar_title="Petal Length (cm)", colorbar_orientation='h', # 水平颜色条 colorbar_len=0.5, # 长度比例 colorbar_x=0.25) # 位置经验之谈:Plotly Express的配色方案默认就非常美观,对于快速出图极其友好。当需要精细控制时,记住
color_discrete_sequence管分类,color_continuous_scale管连续。利用px.colors下的子模块可以快速找到大量经过专业设计的配色方案,比自己去配要可靠得多。
4. 颜色映射深度解析:从Viridis到自定义
颜色映射是科学可视化的灵魂。一个糟糕的颜色映射(比如经典的‘jet’)会扭曲数据、制造虚假边界、并且对色盲不友好。因此,理解并正确使用颜色映射至关重要。
4.1 感知均匀颜色映射:为什么Viridis是首选
Matplotlib 2.0版本的一个重大进步就是用‘viridis’取代了‘jet’作为许多函数的默认颜色映射。原因在于‘viridis’及其同系列的‘plasma’,‘inferno’,‘magma’,‘cividis’都是感知均匀的颜色映射。
- 什么是感知均匀?意味着在颜色映射上移动相同的数值距离,给人眼的亮度/色相变化感是均匀的。这样,数据值的大小变化能通过颜色被准确、线性地感知。
- ‘jet‘为什么不好?
‘jet’在中间部分(青色和黄色)亮度很高,两端(深蓝和深红)亮度很低。这会导致:- 细节丢失:高亮区域掩盖了细微变化。
- 虚假特征:人眼对亮度变化敏感,
‘jet’非均匀的亮度变化会在数据中制造出本不存在的“边界”或“凸起”。 - 色盲不友好:红绿区域难以区分。
如何选择顺序颜色映射?
- 通用场景:无脑选择
‘viridis’。它在所有指标上表现优异。 - 需要更高对比度:尝试
‘plasma’或‘inferno’,它们两端对比更强烈。 - 打印友好(灰度):
‘cividis’是专门为色盲和灰度打印优化的,在黑白打印时仍能保持很好的亮度梯度。 - 传统单色系:
‘Blues’,‘Greens’,‘Reds’,‘Greys’等,当你想强调数据是“正向”的(如数量、密度)且需要保守的学术风格时使用。
如何选择发散颜色映射?当数据有明确的中性点(如0值)和两个相反方向时使用。
- 通用场景:
‘RdBu’(红-蓝)或‘PiYG’(紫-绿)是非常经典和可靠的选择。 - 更多颜色:
‘RdBu_r’(_r表示反转)有时中间色更明显。 - Seaborn风格:
‘vlag’或‘icefire’提供了更现代的观感。
在Matplotlib中应用颜色映射:
import numpy as np import matplotlib.pyplot as plt # 生成一些数据 data = np.random.randn(10, 10) fig, axes = plt.subplots(1, 2, figsize=(10, 4)) # 使用‘jet‘(不推荐) im0 = axes[0].imshow(data, cmap='jet') axes[0].set_title('Jet (Problematic)') plt.colorbar(im0, ax=axes[0]) # 使用‘viridis‘(推荐) im1 = axes[1].imshow(data, cmap='viridis') axes[1].set_title('Viridis (Perceptually Uniform)') plt.colorbar(im1, ax=axes[1]) plt.tight_layout() plt.show()4.2 创建与注册自定义颜色映射
有时,品牌指南或特定出版物要求使用固定的配色。我们可以创建自定义的颜色映射。
从颜色列表创建线性分段颜色映射这是最常见的方式,使用LinearSegmentedColormap.from_list()方法。
from matplotlib.colors import LinearSegmentedColormap # 定义几个关键节点的颜色 colors = ['#2A9D8F', '#E9C46A', '#E76F51'] # 绿 -> 黄 -> 红 # 创建颜色映射对象,命名为‘my_cmap‘ my_cmap = LinearSegmentedColormap.from_list('my_cmap', colors, N=256) # 使用它 plt.imshow(data, cmap=my_cmap) plt.colorbar()创建发散颜色映射使用LinearSegmentedColormap.from_list()时,确保颜色列表中间是你想要的中间色(通常是白色或浅灰色)。
diverging_colors = ['#003f5c', '#58508d', '#bc5090', '#ff6361', '#ffa600'] # 这是一个从深蓝到橙色的多色渐变,不是标准的发散色。 # 标准的红-蓝发散色可以这样简单定义: red_blue_colors = ['blue', 'white', 'red'] div_cmap = LinearSegmentedColormap.from_list('red_blue', red_blue_colors)注册颜色映射以便全局使用如果你希望像使用‘viridis’一样通过字符串名字使用你的自定义颜色映射,需要将其注册到Matplotlib。
from matplotlib import cm cm.register_cmap(name='company_brand', cmap=my_cmap) # 现在可以全局使用了 plt.contourf(X, Y, Z, cmap='company_brand')从图片或ColorBrewer获取颜色你可以使用在线工具或matplotlib.cm.get_cmap()获取现有的颜色映射,然后修改或截取它。
# 获取‘RdYlBu‘发散色,并只取其中一部分 rdylbu = cm.get_cmap('RdYlBu') # 截取从0.3到0.7的部分,创建一个新的、对比更强的发散色 new_cmap = LinearSegmentedColormap.from_list('truncated', rdylbu(np.linspace(0.3, 0.7, 256)))高级技巧:对于更复杂的、非线性的颜色映射(例如在中间部分变化更平缓),你需要定义
red,green,blue三个通道的插值字典,并使用LinearSegmentedColormap的完整构造函数。这更复杂,但能实现完全控制。大多数情况下,from_list方法已经足够。
5. 高级技巧与常见问题排查
掌握了基础之后,我们来看看那些能让你的图表更上一层楼,以及帮你避开暗坑的高级技巧。
5.1 透明度与边缘色的妙用
透明度通过RGBA格式或alpha参数控制透明度,在数据点重叠(如散点图)、绘制置信区间、或创建层次感时极其有用。
# 散点图重叠区域用透明度显示密度 x = np.random.randn(1000) y = np.random.randn(1000) plt.scatter(x, y, alpha=0.1, s=20) # alpha=0.1, 90%透明 plt.title('Density revealed by transparency')边缘色在scatter和bar中,edgecolor(或ec) 和linewidth(或lw) 参数可以定义数据点的边框。这能极大地提高图形的清晰度,尤其是在背景复杂或颜色相近时。
categories = ['A', 'B', 'C', 'D'] values = [5, 7, 3, 9] colors = ['skyblue', 'lightgreen', 'salmon', 'gold'] plt.bar(categories, values, color=colors, edgecolor='black', linewidth=1.5) # 给每个柱子加上黑色边框,使其在白色或浅色背景下更清晰5.2 处理大量分类:颜色不够用怎么办?
当分类超过10个甚至20个时,简单的定性调色板可能颜色不够用,或者颜色过于相似难以区分。
方案一:使用循环色板像‘tab20’,‘tab20b’,‘tab20c’这样的调色板提供了20种区分度较好的颜色,可以组合使用。
# 组合两个20色的调色板来处理最多40个类别 cmap_tab20 = plt.cm.get_cmap('tab20') cmap_tab20b = plt.cm.get_cmap('tab20b') colors = [] for i in range(30): if i < 20: colors.append(cmap_tab20(i / 20)) else: colors.append(cmap_tab20b((i-20) / 20))方案二:使用HSL/HUSL色彩空间均匀采样seaborn的‘husl’或‘hls’调色板可以在色彩环上均匀地选取任意数量的颜色,保证它们在色相上有最大区分度。
import seaborn as sns num_categories = 25 husl_palette = sns.color_palette("husl", num_categories) sns.palplot(husl_palette)方案三:结合其他视觉通道当分类实在太多(比如超过50个),仅靠颜色区分已经不可行。此时必须结合其他视觉通道:
- 形状:在散点图中,为不同大类使用不同颜色,再为每个大类下的子类使用不同形状的标记(marker)。
- 分面:使用
plt.subplots或 Seaborn/Plotly 的facet功能,将数据拆分到多个子图中。 - 交互:在Plotly等交互式图表中,可以使用悬停提示(hover)来显示类别信息,而不是完全依赖颜色。
核心原则:永远不要试图用颜色区分超过12-15个无序类别。人的短期记忆和色彩分辨能力是有限的。
5.3 颜色相关的常见错误与排查
问题1:颜色显示不正确或为黑色
- 可能原因:传入了错误格式的颜色值。例如,将
(255, 0, 0)(0-255范围的整数)当成了RGB元组传给Matplotlib(它期望0-1的浮点数)。 - 排查:检查颜色值格式。如果是0-255的整数,需要除以255.0进行归一化:
color=(255/255.0, 0/255.0, 0/255.0)或np.array([255, 0, 0]) / 255。
问题2:颜色条(Colorbar)与图像颜色不匹配
- 可能原因:在绘制多个使用颜色映射的图形时,没有正确地将颜色条与对应的
mappable对象(如imshow,contourf返回的对象)关联。 - 正确做法:
# 错误:plt.colorbar() 可能关联到最后一个活动的axes # im1 = ax1.imshow(data1, cmap='hot') # im2 = ax2.imshow(data2, cmap='cool') # plt.colorbar() # 这个colorbar对应哪个? # 正确:显式指定mappable对象和axes fig, (ax1, ax2) = plt.subplots(1, 2) im1 = ax1.imshow(data1, cmap='hot') im2 = ax2.imshow(data2, cmap='cool') plt.colorbar(im1, ax=ax1) # 为ax1的图像添加颜色条 plt.colorbar(im2, ax=ax2) # 为ax2的图像添加颜色条
问题3:Seaborn调色板设置后,纯Matplotlib图颜色没变
- 原因:
sns.set_palette()设置的是之后创建的图形的属性循环器。对之前创建的图形或显式指定了颜色的图形无效。 - 解决:确保在
sns.set_palette()或sns.set_theme()之后再创建你的图形。或者,更推荐在绘图函数中通过palette参数局部设置。
问题4:导出图片(如PDF/SVG)后颜色变淡或不同
- 原因:颜色空间和透明度处理问题。Matplotlib默认使用RGB颜色空间,而一些导出格式或查看器可能涉及颜色管理。
- 解决:
- 在保存图形时,指定
facecolor=‘white’和edgecolor=‘none’以确保背景干净。 - 对于印刷用途,可以考虑使用CMYK颜色空间,但这需要额外处理。
- 避免使用过于接近白色或黑色的半透明叠加,在导出为位图(如PNG)时可能产生锯齿。可以尝试先保存为PDF(矢量格式),再在专业软件中转换。
- 在保存图形时,指定
6. 从理论到实践:一套完整的配色工作流
最后,我将分享一套我个人在项目中遵循的、从零开始确定图表配色的实战工作流。这套流程能帮你系统性地做出专业、美观且富有信息量的配色决策。
第一步:明确数据与图表类型
- 数据是分类的、顺序的还是发散的?这是选择调色板类型的根本依据。
- 图表是什么?折线图/柱状图(多系列分类)通常用定性色。热图/等高线图/散点图(连续值)用顺序色或发散色。
第二步:确定基调和约束
- 用途:是学术论文、商业报告、仪表盘还是社交媒体?学术图需要清晰、保守、可能需考虑黑白打印(
‘cividis’,‘viridis’)。商业报告可能需要贴合公司品牌色。 - 受众:是否需要考虑色盲友好性?避免红绿对比,使用
‘colorblind’调色板或‘viridis’/‘plasma’。 - 品牌色:如果有公司或项目的主题色,以其为起点构建调色板。
第三步:选择与构建调色板
- 分类数据:
- 如果类别数 ≤ 6-8,直接从Seaborn的
‘deep’,‘muted’,‘bright’,‘Set2’,‘Set3’或Plotly的qualitative模块中选一个。 - 如果类别数多,使用
‘tab20’系列或‘husl’均匀采样。 - 检查对比度:将选中的颜色去色(转灰度),检查在黑白模式下是否仍有足够的明度差异来区分。
- 如果类别数 ≤ 6-8,直接从Seaborn的
- 顺序数据:
- 首选
‘viridis’系列。如果需要更强烈的视觉冲击,考虑‘plasma’或‘inferno’。 - 如果想强调“数量大=颜色深”,使用单色系如
‘Blues’,‘Greens’。 - 使用
plt.cm.get_cmap(‘viridis’)(0.2)这样的方式,可以提取颜色映射中特定位置的颜色用作强调色。
- 首选
- 发散数据:
- 首选
‘RdBu’或‘PiYG’。用‘_r’后缀反转如果需要。 - 确保中间色(通常是白色或浅灰)准确地对应你的数据中性点(如0)。
- 首选
第四步:在代码中应用与测试
- 在Notebook或脚本中,用一个简单的测试数据集绘制图表,查看配色效果。
- 关键测试:
- 重叠测试:对于散点图或线图,数据点重叠时,透明度(
alpha)是否设置得当? - 打印测试:将图表保存为灰度图(
cmap=‘gray’或去色处理),检查是否所有信息依然可辨。 - 色盲模拟测试:可以使用在线工具(如Coblis)或专门的Python库(如
daltonlens)来模拟色盲视角下的图表效果。
- 重叠测试:对于散点图或线图,数据点重叠时,透明度(
第五步:迭代与文档化
- 根据测试反馈调整颜色、透明度或甚至调色板类型。
- 将最终确定的颜色代码(十六进制或RGB元组)或调色板名称记录在项目的样式指南或绘图配置模块中,确保团队内图表风格统一。
- 对于Matplotlib项目,可以创建一个自定义的
style.mplstyle文件,在其中定义axes.prop_cycle等参数,实现一键应用全局样式。
一个完整的示例:创建公司品牌调色板假设公司品牌色是深蓝色#003366和橙色#FF9900,我们需要为一个有5个分类的柱状图配色。
- 定性调色板:以品牌蓝和品牌橙作为起点,利用
seaborn.husl_palette()或在线调色板生成器(如palettable或colorbrewer2),生成在HUSL色彩空间中均匀分布的5种颜色,确保包含品牌色。 - 顺序调色板:从白色
#FFFFFF渐变到品牌蓝#003366,创建‘company_blues’颜色映射。 - 发散调色板:从品牌蓝
#003366渐变到白色#FFFFFF,再渐变到品牌橙#FF9900,创建‘company_diverging’颜色映射。 - 将这些自定义颜色映射注册到Matplotlib,并在团队中共享
style.mplstyle文件。
颜色是数据可视化中最具表现力也最易出错的环节之一。它没有唯一的正确答案,但遵循感知原理、考虑使用场景、并保持一致性,能极大地提升你图表的质量和专业度。希望这份从基础到进阶的汇总,能成为你Python作图路上随时查阅的可靠色彩手册。
