ARTICLE · 1157513
看到一张好图,怎么把它变成自己的绘图模板?
看到一张好图,怎么把它变成自己的绘图模板?做科研的时候,我们大概都存过不少好看的图。比如说,一张热图的注释很清楚,一张多面板图把结果安排得很好,或者一套配色正好适合自己的数据。看到的时候先收藏,想着以后可以参考。 但真正要用的时候,往往还是得从头开始。截图找到了,代码在哪里?需要什么输入?几个面板怎么拼起来?这些事情,收藏的时候通常没有一起解决。 我开发 Scientific Figure Library(SFL),就是想把这个过程接起来:看到一张好图,让 Agent 帮忙复刻,把代码、示例数据和说明整理好,再存进自己的绘图库。下次遇到类似的需求,就可以拿出来改。 这次用两个例子讲一下。一个来自公众号,已经有绘图代码;另一个来自论文,通过 CiteBox 把图和相关信息一起交给 Agent。 第一个例子是一篇介绍 TF motif 富集热图 1的公众号文章。它把不同细胞类型、不同基因表达趋势对应的 motif 富集结果放在一张图里,左侧标注细胞类型和趋势,底部标注 TF 家族。 
这种布局挺适合参考。比如说,我们分析了几类细胞的上调和下调基因,想看看它们分别富集哪些 motif,就可以用类似的方式展示。矩阵负责呈现结果,旁边的注释负责交代分组,读者不用来回翻图注。 原文整理了 R 代码,也给出了三张输入表的结构。不过,没有提供能直接复跑的完整 CSV,所以这个例子先用示例数据复刻绘图方式。 我在 Wisp Science 里启动 SFL,然后发了一句话: 启动 SFL,帮我复刻这个公众号上的 figure: https://mp.weixin.qq.com/s/0K0frTEwu0WSEg6z6U-YCw 再把参考图放进对话里,让 Agent 同时看到代码和图。这个例子我用的是 Kimi K3;涉及看图、对照和修改的时候,使用有图像理解能力的模型会方便一些。 
第一版画出来是这样: 
主要布局已经比较接近原图了。这次能比较快地画出来,一个很直接的原因是原作者已经把代码整理好了。Agent 结合 SFL 内置的 skills,读代码、准备输入,再根据参考图调整布局,省去了不少手动试参数的时间。 这里也要说清楚,示例数据上的颜色和显著性数值,只是用来检查绘图效果。以后换成自己的 motif 富集结果,才需要解释哪些组合值得关注。 图画出来只是第一步。临时脚本放在当前项目里,过几个月换一个项目,还得重新找依赖、猜输入格式。我希望 SFL 能把这些东西一起留下来。 SFL 里有几个位置,分别对应草稿、展示、个人可复用模板,以及开放的图模块: Draft → Gallery → Local Published → Open figure module 复刻和修改先在 Draft 里完成,通过 Gallery 查看效果。确认图、代码和输入说明都合适以后,再收进 Local Published,供后续项目使用。Open figure module 则用来收录可以公开分享的模块。 这次检查完草稿,我继续给 Agent 发了一句话: 好的,现在晋升到 Local Published。 它就把这张图整理到了个人绘图库里。 
再打开的时候,除了预览,还能看到绘图代码、输入文件和使用说明。比如说,需要哪些列,哪些参数可以改,示例数据能说明什么,这些都可以随模板一起保存。以后换一份数据,就有了明确的修改起点。 公众号里有代码,处理起来比较顺。更多时候,我们是在论文里看到一张想参考的图,手里只有 PDF。这时还得把图注、论文出处和对应面板找出来,才能让 Agent 理解要画什么。 所以我也把自己开发的 CiteBox 和 SFL 接了起来。 在 CiteBox 中导入论文、完成图像解析以后,可以在图片库里浏览提取出来的图。找到想参考的那张,再打开详情,查看图注和论文信息。 
先在 CiteBox 的设置里配置好与 SFL 联动的目录: 
然后,在图像详情页点击“发送到 Figure Library”。 
对应目录里就会出现一个 Figure Transfer Package。 
包里有 figure.png、handoff.md、manifest.json 和 research-context.json,把图片、图注、Figure ID、页码、论文信息、摘要和校验信息一起交给 Agent。 
这样交接会方便很多。比如说,我们只想复刻一张补充图的 panel A,Agent 可以结合图注了解每个部分的含义,也能根据论文信息继续查找作者的代码和数据。 这次我在启动了 SFL 的 Wisp Science 对话里,给出了导出目录和任务: 图像包目录: E:\plot\citebox\citebox-figure-125-transfer-package 帮我复刻这张图的 panel A。 可以查询作者的代码和数据,优先使用作者的代码和数据。 如果数据超过 1 GB,就使用模拟数据完成绘图模板的复刻, 并在说明中注明使用了模拟数据。 这里的 1 GB 是我这次任务设置的下载上限。如果目的是复现论文分析,就要继续处理原始数据;这次主要想留下一个以后能换数据的绘图模板,所以可以先用模拟数据把布局跑通。 第一版结果如下: 
这张图包含多个部分,第一版已经把主要结构搭起来了,但还有一些细节需要改。比如说,dotplot 的横轴文字在原图里是黑色的,复刻出来却用了彩色。 我继续让 Agent 对照原图检查: 逐项对照原图,列出新版 panel A 仍存在的视觉差异并修复。 我注意到 dotplot 的 x 轴文字在原图中是黑色, 现在用了彩色,请先调整这一处。 修改后的预览: 
做这种图,我觉得还是要留出几轮检查的时间。整体像了以后,再看字体、颜色、坐标、注释和面板间距。有些差异可以直接指出来,有些可以先让 Agent 列出来,再决定怎么改。 确认后,同样把它发布到 Local Published。 
这样,两种来源就接到了同一个流程里:网页上的代码可以整理成模板,论文里的图也可以带着出处和图注进入项目,完成复刻和检查以后,再存进自己的绘图库。 这两个例子里的绘图模块,我们已经收录到 Open figure module 中,感兴趣的朋友可以试一下。 我觉得这件事最有用的地方,是每次画完图,能给下次留一点东西。代码怎么运行、输入怎么组织、哪些参数控制布局,以及参考图来自哪里,都可以一起保存。遇到相似的需求时,先找一个合适的模板,再换数据、改注释、调配色,工作会顺很多。 Agent 可以帮忙读代码、准备示例输入、调整细节。至于自己的结果适不适合这种图,哪些数据处理合理,最后应该突出什么,还是需要我们自己判断。 以后看到一张值得参考的图,可以顺手多做一步:让 Agent 帮忙整理成能运行的模板,检查好,再放进 SFL。收藏的图多了,自己的绘图库也就慢慢积累起来了。 SFL:https://sfl.bio CiteBox:https://github.com/xuzhougeng/citebox https://mp.weixin.qq.com/s/0K0frTEwu0WSEg6z6U-YCw
看到一张好图,怎么把它变成自己的绘图模板?
先从有代码的图开始



画出来以后,再存成模板

论文里的图,可以从 CiteBox 直接送过去







