SciPalette:为科研图表准备的配色工作台
最近整理 FantasticJoe 系列网站时,我又把 SciPalette 从头到尾看了一遍。每次看到它,我都会想到同一件事:很多科研图的问题,不是分析错了,而是颜色想得太晚了。等 UMAP、t-SNE、heatmap、bar plot 都已经画出来,才开始临时试颜色,往往已经有点被动。
这一步看起来不起眼,实际很影响读图。颜色太跳、梯度不顺、分组挤在一起、打印成灰阶以后糊掉、色盲读者分不清差别,这些都会让读者更难抓住图里真正重要的关系。SciPalette 想处理的就是这段麻烦:别把颜色当最后一层装饰,把它提前放进图表设计里。

不是装饰,而是论证的一部分
SciPalette 首页那句 “Scientific color, composed for publication.” 我一直觉得写得挺准。配色不是图做完以后再抹上去的一层皮,它会直接影响图是怎么被读的。
在论文图表里,颜色会决定读者先看哪里,哪些组会被看成接近,哪些区域会被理解成高值或低值,哪些模式可能被误读成差异。尤其是单细胞图、空间图、热图和临床比较图,颜色既关乎美观,也关乎判断。
所以 SciPalette 真正想做的,不是给你几张“好看的色板截图”,而是把色板整理成能直接进工作流的颜色系统。categorical、sequential、diverging、heatmap、neutral 这些分类,看起来很朴素,但做图时很有用,因为它们对应的是不同的阅读任务。
Palette Library:先把可用色板组织好
Palette Library 是 SciPalette 最核心的入口,也是我最常用的页面。它把现在的色板都放在一个可检索、可筛选、可复制的地方。你可以按图表类型、颜色数量、可访问性和类别筛选,也可以直接复制 Python 或 R 代码。

这个页面的价值,说白了就是帮我少走几遍弯路。真正耗注意力的,通常不是写 scale_color_manual() 或 ListedColormap,而是在旧论文截图、默认主题和各种在线调色器之间来回试。SciPalette 把这一步提前了,让问题变得更直接:我现在画的是什么图?有几组?背景偏浅还是偏深?这张图要强调连续梯度,还是离散分组?
首页现在写的是 45 个 palettes、4 个 families 和 19 个 accessible palettes。这个数量我觉得刚好。不会少到捉襟见肘,也没多到让人又开始选择困难。它更像一组能长期维护的科研默认值。
Recommendation 和 Compare:把选择变成判断
SciPalette 还有两个我觉得很顺手的页面:Recommendation 和 Compare。
Recommendation 像个不太啰嗦的本地助手。你把图表意图、图表家族、颜色数量、背景和可访问性需求说清楚,它就给你几套更合适的候选。这个过程不需要账号,也不用上传数据,重点是把“我该用哪套颜色”从一种模糊感觉,变成一个能描述、能筛选的问题。
Compare 则更像最后拍板前的那一步。它把用途、颜色数量、标签、灰阶对比和色块摆在一起,让你别只靠第一眼的“好不好看”来选。科研图最怕的就是屏幕上挺漂亮,打印一灰、投影一打、图例一挤就看不清了。
我喜欢这两个页面的原因也很简单:它们没有假装自己能替你做判断。工具把差异摊开,人自己决定哪套颜色最适合这张图。
Art2Pal:从图像气氛到科学色板
Art2Pal 是 SciPalette 里最好玩的一块。你可以上传一张油画、照片或其他图像,在浏览器本地提取颜色风格,再把它改写成 categorical、sequential、diverging、neutral 这些图表里真的能用的色板。

这个功能最重要的地方,不是去数“图里哪几个颜色出现最多”。如果只是抓 dominant colors,最后常常会得到一组在原图里没问题、拿来做图却不好用的颜色。Art2Pal 做的是转译:尽量保留图像里的气氛和关系,再把它改写成图表能承受的颜色角色。
还有个细节我很喜欢。页面上明确写着 image processing stays in this browser tab。也就是说,图像处理就在本地浏览器里完成,不上传,也不存储。对这种轻量工具来说,这样的边界很干净。
视觉来源:Wheat Field with Cypresses
SciPalette 自己的视觉系统也走同一条路:不是把一张画原封不动搬进网页,而是把画面的气氛翻成界面里的几种角色。About 页面里写得很清楚,它的界面氛围来自 Vincent van Gogh 的 Wheat Field with Cypresses(《麦田与柏树》)。

这套视觉角色大致可以理解为:
#F8F5EC:paper ground,给页面一个温暖的纸张底色。#4F6D5F:cypress green,作为克制的强调色。#BFA05A:muted wheat,保留一点麦田的时间感和旧纸感。#6F8792:blue-gray air,用在空气感、辅助信息和弱层级里。#212C33:figure ink,承担正文和图表说明的清晰度。
这也解释了为什么 SciPalette 看起来不像一个常见的工具站。它不是纯白背景配一堆亮按钮,也不是把所有功能硬堆成 dashboard。它更像一张摊开的工作纸,干净、克制、可读,同时还留着一点作者自己的审美。
我会怎么使用它
如果按我自己的习惯,我大概会这样用 SciPalette:
- 先在 Palette Library 里按图表类型和组数筛掉明显不合适的色板。
- 剩两三套候选时,用 Compare 看灰阶、标签和层次有没有问题。
- 如果我想从某张画或照片借一点气氛,再去 Art2Pal 做一轮转译。
- 最后把 Python 或 R 代码贴进绘图脚本里,再根据图例、背景和版面微调。
这个流程最大的好处,是颜色不会等到最后一分钟才决定。它会更早进入图表设计,和数据类型、读者任务、输出媒介一起被考虑。
一个小而完整的工具
SciPalette 最让我喜欢的地方,是它没有急着把自己做成一个大平台。它就是老老实实地把一件事做好:帮你在做图之前,把颜色先想明白。
科研图表里的颜色当然可以好看,但它不能只负责好看。它还得帮读者比较、分组、判断变化,最好别在最关键的时候添乱。SciPalette 的价值也正在这里,它把颜色从“最后补一下”的步骤,挪到了更靠前的位置。
对我来说,这也是 FantasticJoe 系列网站里很重要的一块。主站负责呈现人和作品,Blog 负责留下过程,SciPalette 则把一个更具体的问题认真做小:怎么让科研图表的颜色既顺眼,又真的有用。