Viridis 是一种适用于连续科学数据的感知均匀颜色映射。
它从深紫色过渡到亮黄色。与它所取代的彩虹色映射不同,数据中相同大小的变化,在视觉上也会呈现为近似相同的色彩变化。因此,它很适合热图、密度图,以及所有需要读者根据颜色估读数值的科研插图。本文按实际常用的采样级数列出对应 HEX 色值。

Viridis 5、8、10 级 HEX 色值
| 级数 | HEX 色值 |
|---|---|
| 5 | #440154 #3B528B #21918C #5EC962 #FDE725 |
| 8 | #440154 #46327E #365C8D #277F8E #1FA187 #4AC16D #A0DA39 #FDE725 |
| 10 | #440154 #482878 #3E4989 #31688E #26828E #1F9E89 #35B779 #6ECE58 #B5DE2B #FDE725 |
#440154(深紫色)和 #FDE725(亮黄色)。中间色值会随级数变化,所以 8 级和 10 级列表并不是彼此的子集。无论在哪里引用 Viridis HEX 色值,都应同时注明采样级数,否则他人无法准确复现。为什么感知均匀很重要
经典彩虹色映射有些区段变化很快,有些区段却几乎不变。即使数据本身平滑连续,读者也会把颜色突变处误认为数据中的清晰边界,同时忽略颜色变化缓慢区段中的真实结构。换句话说,这类颜色映射会凭空制造特征,也会掩盖原有特征。
Viridis 正是为避免这个问题而设计。它的明度从一端到另一端单调增加,整个范围内的视觉变化速度也大致保持恒定。这直接带来两个好处:
- 转换为灰度后仍然有效。 由于明度单调变化,灰度转换不会破坏数值顺序。彩虹色映射则不同,其中部往往比两端都更亮。
- 不同色觉下仍然易读。 数值顺序主要由明度而不是红绿色差来承载,因此读图逻辑能够保留。

可直接复制的代码
Python
import matplotlib.pyplot as plt
plt.imshow(data, cmap="viridis")
# 离散采样
from matplotlib import cm
from matplotlib.colors import to_hex
import numpy as np
hexes = [to_hex(cm.get_cmap("viridis")(x)).upper()
for x in np.linspace(0, 1, 8)]R
library(viridis)
scale_fill_viridis_c() # 连续型
scale_fill_viridis_d() # 离散型
viridis(8) # HEX 向量CSS
.viridis-gradient {
background: linear-gradient(
to right,
#440154, #46327E, #365C8D, #277F8E,
#1FA187, #4AC16D, #A0DA39, #FDE725
);
}
哪些情况不适合使用 Viridis
- 没有顺序的类别。 处理组和物种不存在自然顺序。如果从 Viridis 中取色,会暗示一个并不存在的等级关系。此时应改用 Okabe-Ito 这类定性调色板。
- 围绕有意义中点向两侧发散的数据。 对数倍数变化、温度异常值和相关系数都有一个中性中心。顺序型颜色映射会掩盖这个中心,应改用中间为中性色的发散型配色。
#440154 细线或小标记,看起来可能就是黑色。对于系列较少的折线图,定性调色板通常能更清楚地传达差异。提示
Viridis 还有几个遵循同一设计原则的同类方案:magma、inferno、plasma 和 cividis。其中 cividis 专门针对不同色觉人群看到近似相同图像这一目标做了优化,因此很适合作为面向广泛读者的科研插图默认配色方案。

延伸阅读
相关阅读: 科研插图最佳配色方案:出版级与色盲友好指南(2026), 低预算也能做出 Nature 级别的科学配图.



