夜雨聆风学习资料网

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。
它就把这张图整理到了个人绘图库里。
再打开的时候,除了预览,还能看到绘图代码、输入文件和使用说明。比如说,需要哪些列,哪些参数可以改,示例数据能说明什么,这些都可以随模板一起保存。以后换一份数据,就有了明确的修改起点。

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

公众号里有代码,处理起来比较顺。更多时候,我们是在论文里看到一张想参考的图,手里只有 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

相关学习资料