别再手动查颜色代码了!用Python Matplotlib的colormaps和XKCD颜色名,效率提升10倍

别再手动查颜色代码了!用Python Matplotlib的colormaps和XKCD颜色名,效率提升10倍

每次做数据可视化时,最让我头疼的就是配色问题。记得刚开始用Matplotlib时,我总是一边开着颜色对照表网页,一边在代码里小心翼翼地输入RGB或HEX值,生怕输错一个数字。直到发现了Matplotlib内置的colormaps和XKCD颜色名,才真正从这种低效的工作方式中解脱出来。

如果你也厌倦了在数百种颜色代码中大海捞针,这篇文章将彻底改变你的工作流程。我们将深入探索Matplotlib提供的两大高效配色工具:精心设计的colormaps和由社区命名的XKCD颜色库。通过具体代码示例,你会看到如何用一行代码调用专业级配色方案,以及如何用自然语言般的颜色名称(如"sky blue")替代复杂的RGB值。

1. 告别手动调色:Matplotlib colormaps的强大之处

Matplotlib内置的colormaps是数据可视化领域的隐藏宝藏。这些精心设计的颜色映射不仅能自动生成协调的配色方案,还能根据数据类型(如连续型、离散型、发散型)提供最合适的视觉表达。

1.1 内置colormaps的分类与应用场景

Matplotlib的colormaps主要分为三类:

  • 顺序型(Sequential) :适用于从低到高有序数据,如 viridis , plasma , inferno
  • 发散型(Diverging) :适用于有中间值的数据,如 coolwarm , bwr , seismic
  • 循环型(Cyclic) :适用于周期性数据,如 twilight , hsv

查看所有可用colormaps的简单方法:

import matplotlib.pyplot as plt
print(plt.colormaps())

1.2 实际应用示例:从基础到高级

基础使用只需在绘图函数中指定cmap参数:

import numpy as np

x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)

plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()

更专业的做法是创建自定义colormap。比如创建一个从蓝色到红色的渐变:

from matplotlib.colors import LinearSegmentedColormap

colors = ["blue", "white", "red"]
cmap = LinearSegmentedColormap.from_list("mycmap", colors)
plt.imshow(np.random.rand(10,10), cmap=cmap)
plt.colorbar()

提示:使用 plt.colormaps() 查看所有可用colormap时,带 _r 后缀的表示反向版本(如 viridis_r

2. XKCD颜色名:用自然语言替代颜色代码

2010年,XKCD漫画作者Randall Munroe进行了一项大型颜色调查,收集了人们如何命名颜色的数据。Matplotlib将这些命名颜色集成到了库中,形成了包含949种易记颜色名称的XKCD颜色库。

2.1 如何使用XKCD颜色名

使用这些颜色非常简单,只需在颜色名前加上 'xkcd:' 前缀:

plt.plot([1,2,3], color='xkcd:sky blue')
plt.bar([1,2,3], [4,5,6], color='xkcd:grass green')

查看所有XKCD颜色名的完整列表:

import matplotlib._color_data as mcd
print(list(mcd.XKCD_COLORS.keys()))

2.2 与传统方法的对比

传统RGB/HEX方式:

# 天蓝色
plt.plot([1,2,3], color='#87CEEB')
# 或
plt.plot([1,2,3], color=(0.53, 0.81, 0.92))

XKCD方式:

plt.plot([1,2,3], color='xkcd:sky blue')
方法 代码长度 可读性 易记性 准确性
RGB
HEX
XKCD

3. 高级技巧:colormaps与XKCD颜色的组合应用

3.1 从XKCD颜色创建自定义colormap

from matplotlib.colors import LinearSegmentedColormap

colors = ["xkcd:light blue", "xkcd:blue", "xkcd:dark blue"]
cmap = LinearSegmentedColormap.from_list("xkcd_blues", colors)

data = np.random.rand(10,10)
plt.imshow(data, cmap=cmap)
plt.colorbar()

3.2 多系列数据的颜色分配策略

当需要为多个数据系列分配颜色时,可以结合XKCD颜色名和colormap:

categories = ['A', 'B', 'C', 'D']
values = [10, 20, 30, 40]

# 从XKCD中选择一组协调的颜色
colors = ['xkcd:teal', 'xkcd:orange', 'xkcd:red', 'xkcd:purple']

plt.bar(categories, values, color=colors)

4. 专业级可视化配色实战

4.1 科学可视化中的最佳实践

对于科学可视化,颜色选择不仅要美观,更要准确传达数据信息。以下是一些专业建议:

  • 避免彩虹色图 :使用 viridis plasma 等现代感知均匀的colormap
  • 考虑色盲友好 :避免红绿组合,可使用 cividis colormap
  • 打印友好 :确保在灰度打印时仍能区分, viridis 是不错的选择

创建色盲友好图的示例:

import matplotlib as mpl

# 模拟色盲视图
with mpl.rc_context({'image.cmap': 'viridis'}):
    fig, axs = plt.subplots(1, 2, figsize=(10,4))
    im = axs[0].imshow(np.random.rand(10,10))
    plt.colorbar(im, ax=axs[0])
    axs[0].set_title('Normal')
    
    im = axs[1].imshow(np.random.rand(10,10))
    plt.colorbar(im, ax=axs[1])
    axs[1].set_title('Deuteranopia')
    plt.show()

4.2 交互式颜色选择技巧

在Jupyter notebook中,可以创建交互式颜色选择器:

from IPython.display import display
import ipywidgets as widgets

color_picker = widgets.ColorPicker(concise=False, description='Pick a color')
display(color_picker)

def on_color_change(change):
    plt.figure()
    plt.plot([1,2,3], color=change['new'])
    plt.show()

color_picker.observe(on_color_change, names='value')

对于更专业的颜色选择,可以使用 colorspacious 库进行颜色空间转换和视觉均匀性评估:

import colorspacious as cs

# 比较两种颜色的感知差异
delta = cs.deltaE("xkcd:sky blue", "xkcd:light blue")
print(f"Perceptual difference: {delta}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值