当前位置: 首页 > news >正文

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内置的调色板类型

  1. 定性调色板:用于区分没有顺序关系的分类数据。这是最常用的。
    • ‘deep’,‘muted’,‘bright’,‘pastel’,‘dark’,‘colorblind’:Seaborn的默认六套调色板,‘deep’是默认。
    • ‘Set1’,‘Set2’,‘Set3’,‘tab10’,‘tab20’:来自ColorBrewer和Matplotlib的经典分类色板。
    • ‘husl’,‘hls’:在HSL色彩空间中均匀选取的颜色,区分度极好。
  2. 顺序调色板:用于表示从低到高有序的数值数据。本质就是单色渐变的颜色映射。
    • ‘rocket’,‘mako’,‘crest’,‘flare’:Seaborn自带的现代渐变色,非常漂亮。
    • ‘viridis’,‘plasma’,‘inferno’,‘magma’,‘cividis’:Matplotlib的感知均匀颜色映射,是科学可视化的黄金标准。
    • ‘Blues’,‘Greens’,‘Reds’,‘Oranges’,‘Purples’:单色渐变,名字直观。
  3. 发散调色板:用于表示有中间值(如零值)和两个方向极值的数据(如正负温度偏差)。
    • ‘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’在中间部分(青色和黄色)亮度很高,两端(深蓝和深红)亮度很低。这会导致:
    1. 细节丢失:高亮区域掩盖了细微变化。
    2. 虚假特征:人眼对亮度变化敏感,‘jet’非均匀的亮度变化会在数据中制造出本不存在的“边界”或“凸起”。
    3. 色盲不友好:红绿区域难以区分。

如何选择顺序颜色映射?

  1. 通用场景:无脑选择‘viridis’。它在所有指标上表现优异。
  2. 需要更高对比度:尝试‘plasma’‘inferno’,它们两端对比更强烈。
  3. 打印友好(灰度)‘cividis’是专门为色盲和灰度打印优化的,在黑白打印时仍能保持很好的亮度梯度。
  4. 传统单色系‘Blues’,‘Greens’,‘Reds’,‘Greys’等,当你想强调数据是“正向”的(如数量、密度)且需要保守的学术风格时使用。

如何选择发散颜色映射?当数据有明确的中性点(如0值)和两个相反方向时使用。

  1. 通用场景‘RdBu’(红-蓝)或‘PiYG’(紫-绿)是非常经典和可靠的选择。
  2. 更多颜色‘RdBu_r’_r表示反转)有时中间色更明显。
  3. 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')

边缘色scatterbar中,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个),仅靠颜色区分已经不可行。此时必须结合其他视觉通道:

  1. 形状:在散点图中,为不同大类使用不同颜色,再为每个大类下的子类使用不同形状的标记(marker)。
  2. 分面:使用plt.subplots或 Seaborn/Plotly 的facet功能,将数据拆分到多个子图中。
  3. 交互:在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颜色空间,而一些导出格式或查看器可能涉及颜色管理。
  • 解决
    1. 在保存图形时,指定facecolor=‘white’edgecolor=‘none’以确保背景干净。
    2. 对于印刷用途,可以考虑使用CMYK颜色空间,但这需要额外处理。
    3. 避免使用过于接近白色或黑色的半透明叠加,在导出为位图(如PNG)时可能产生锯齿。可以尝试先保存为PDF(矢量格式),再在专业软件中转换。

6. 从理论到实践:一套完整的配色工作流

最后,我将分享一套我个人在项目中遵循的、从零开始确定图表配色的实战工作流。这套流程能帮你系统性地做出专业、美观且富有信息量的配色决策。

第一步:明确数据与图表类型

  • 数据是分类的、顺序的还是发散的?这是选择调色板类型的根本依据。
  • 图表是什么?折线图/柱状图(多系列分类)通常用定性色。热图/等高线图/散点图(连续值)用顺序色或发散色。

第二步:确定基调和约束

  • 用途:是学术论文、商业报告、仪表盘还是社交媒体?学术图需要清晰、保守、可能需考虑黑白打印(‘cividis’,‘viridis’)。商业报告可能需要贴合公司品牌色。
  • 受众:是否需要考虑色盲友好性?避免红绿对比,使用‘colorblind’调色板或‘viridis’/‘plasma’
  • 品牌色:如果有公司或项目的主题色,以其为起点构建调色板。

第三步:选择与构建调色板

  1. 分类数据
    • 如果类别数 ≤ 6-8,直接从Seaborn的‘deep’,‘muted’,‘bright’,‘Set2’,‘Set3’或Plotly的qualitative模块中选一个。
    • 如果类别数多,使用‘tab20’系列或‘husl’均匀采样。
    • 检查对比度:将选中的颜色去色(转灰度),检查在黑白模式下是否仍有足够的明度差异来区分。
  2. 顺序数据
    • 首选‘viridis’系列。如果需要更强烈的视觉冲击,考虑‘plasma’‘inferno’
    • 如果想强调“数量大=颜色深”,使用单色系如‘Blues’,‘Greens’
    • 使用plt.cm.get_cmap(‘viridis’)(0.2)这样的方式,可以提取颜色映射中特定位置的颜色用作强调色。
  3. 发散数据
    • 首选‘RdBu’‘PiYG’。用‘_r’后缀反转如果需要。
    • 确保中间色(通常是白色或浅灰)准确地对应你的数据中性点(如0)。

第四步:在代码中应用与测试

  • 在Notebook或脚本中,用一个简单的测试数据集绘制图表,查看配色效果。
  • 关键测试
    • 重叠测试:对于散点图或线图,数据点重叠时,透明度(alpha)是否设置得当?
    • 打印测试:将图表保存为灰度图(cmap=‘gray’或去色处理),检查是否所有信息依然可辨。
    • 色盲模拟测试:可以使用在线工具(如Coblis)或专门的Python库(如daltonlens)来模拟色盲视角下的图表效果。

第五步:迭代与文档化

  • 根据测试反馈调整颜色、透明度或甚至调色板类型。
  • 将最终确定的颜色代码(十六进制或RGB元组)或调色板名称记录在项目的样式指南或绘图配置模块中,确保团队内图表风格统一。
  • 对于Matplotlib项目,可以创建一个自定义的style.mplstyle文件,在其中定义axes.prop_cycle等参数,实现一键应用全局样式。

一个完整的示例:创建公司品牌调色板假设公司品牌色是深蓝色#003366和橙色#FF9900,我们需要为一个有5个分类的柱状图配色。

  1. 定性调色板:以品牌蓝和品牌橙作为起点,利用seaborn.husl_palette()或在线调色板生成器(如palettable或colorbrewer2),生成在HUSL色彩空间中均匀分布的5种颜色,确保包含品牌色。
  2. 顺序调色板:从白色#FFFFFF渐变到品牌蓝#003366,创建‘company_blues’颜色映射。
  3. 发散调色板:从品牌蓝#003366渐变到白色#FFFFFF,再渐变到品牌橙#FF9900,创建‘company_diverging’颜色映射。
  4. 将这些自定义颜色映射注册到Matplotlib,并在团队中共享style.mplstyle文件。

颜色是数据可视化中最具表现力也最易出错的环节之一。它没有唯一的正确答案,但遵循感知原理、考虑使用场景、并保持一致性,能极大地提升你图表的质量和专业度。希望这份从基础到进阶的汇总,能成为你Python作图路上随时查阅的可靠色彩手册。

http://www.jsqmd.com/news/1395526/

相关文章:

  • MathorCup A题解析:量子-经典混合模型在通信网络优化中的应用
  • 基于YOLOv8的手写数字符号检测:从数据合成到UI部署全流程
  • MathorCup数学建模竞赛:从选题策略到论文写作的实战指南
  • [人工智能]stable-baselines3 算法工程实践概览
  • 单片机毕设项目:带阈值可调功能的 STM32 智能垃圾桶监控系统实现 基于 ESP01s 无线传输的 STM32 智能垃圾桶软硬件开发(013103)
  • SMUDebugTool:AMD Ryzen调试工具完整上手指南,从零到精调只需十分钟
  • 李飞飞AI理念:增强人类能动性的技术实践指南
  • Word文档页码从指定页开始:分节符与页脚链接设置详解
  • Android权限管理:从运行时请求到系统级默认配置的工程实践
  • Android Flow流式布局:四种换行模式与实战应用详解
  • 人造跨维器械、外物科技的终极局限035
  • 北京离婚律师哪家好?看这里就够了 - 品牌排行榜
  • 《知了·金蝉偈》蝉不懂禅,妄称知了。蝉亦为禅,共佛新生。,,,遍历千情终有果,渡尽心劫有情佛。一个理工男,一个程序员,改行做诗歌,这是最满意的一个作品,阐述了一整个IP宇宙的最底层根基。堪称完美!
  • AMD TPM 8.3/8.5漏洞技术剖析:服务器加密信任根崩塌后的备份密钥泄露风险与紧急加固
  • C++三角函数实战:从弧度精度到欧拉公式的工程应用
  • 桌面级3D打印TPU材料实战指南:从硬件配置到切片参数优化
  • 2026年8月杭州正规代理记账机构精选(口碑实测版) - 品牌测评网
  • 数学建模竞赛实战指南:从Python数据分析到模型构建与论文写作
  • 告别乱码一劳永逸:Locale Emulator 区域模拟工具从原理到实战
  • JSFuck解密实战:从原理到工具,安全高效还原混淆代码
  • 从定时任务到智能代理:构建具备感知与学习能力的后台智能体
  • APMCM数学建模竞赛在线答辩全攻略:从PPT设计到问答应对
  • 用OpenGlass把普通眼镜改造成AI智能眼镜:从零到能用的完整路线图
  • 2026优选昆明有实力的现代简约风销售公司推荐 - 装修教育财税推荐2026
  • AI Agent上下文管理:压缩逻辑解析与工程实践
  • 为什么G-Helper无法启动?4个关键排查点,一次搞定华硕硬件控制工具
  • 【单片机毕设案例分享】基于 STM32 的多传感器融合智能储物柜体系统设计 基于 STM32 的远程阈值配置智能环境柜体装置开发(012003)
  • Claude Code项目全解析:AI代码助手部署、测试与工程实践指南
  • 数学建模竞赛:从参考代码到系统化能力构建的实战指南
  • 数学建模竞赛实战指南:从问题拆解到Python实现的全流程解析