figures4papers的3D风格球体绘制技巧:SLERP测地线弧与着色圆盘,如何做出顶会概念示意图?
【免费下载链接】figures4papersMy Python scripts to make high-quality figures for publications in top AI conferences and journals.项目地址: https://gitcode.com/gh_mirrors/fi/figures4papers
你是否在为论文的概念图发愁?开源项目figures4papers收录了发表于 Nature Machine Intelligence、ICML、NeurIPS、ECCV 等顶会的绘图脚本,其中 figure_Dispersion 项目用两个核心技巧——SLERP 测地线弧与着色圆盘,在纯 2D 的 matplotlib 里画出极具立体感的3D风格球体,轻松做出顶会概念示意图 🎯。
为什么不用真的 3D?——着色圆盘技巧
matplotlib 的 3D 投影做概念图往往又慢又难控制。figures4papers 的解法很聪明:只画圆盘,用明暗"骗"出立体感。
在 plot_idea.py 中,脚本先对单位圆盘做网格化,计算每个格点的法向量,再与固定的光源方向(如(-0.5, 0.5, 0.8))做点积,得到朗伯(Lambert)光照强度,最终用灰度图渲染出"左上打光的球体" 👇
核心逻辑只有四步:
- 生成圆盘网格,
r² = x² + y² ≤ 1掩膜出球面区域 - 由
(x, y, z)归一化得到法向量 - 计算
强度 = max(0, 法向量 · 光方向) imshow以灰度图贴出,透明度alpha=0.3~0.5让它更柔和
仓库的 references/api.md 还把这个技巧封装成了make_sphere_illustration()助手函数,改一下light_dir就能换光照角度。
SLERP测地线弧:球面上最短的连接线
球面上两点之间的"直线"其实是测地线(大圆弧)。直接画直线会穿过球体内部,概念图立刻穿帮。
plot_illustration.py 中的_slerp_arc()用SLERP(球面线性插值)解决这个问题:先算出两点的夹角 θ,再沿大圆弧取 200 个插值点,画出的弧线天然贴合球面。
配套的 draw_geodesic() 还能:
- 用
shorten参数缩短弧线两端,留出呼吸感 - 在两端自动添加
FancyArrowPatch箭头,表示"相互推开" - 支持实线/虚线区分"作用中"与"无操作"的语义
上图中每个小面板都是同一套配方:着色圆盘打底 → 散点标注样本 → 测地线弧连接 → 箭头和文字气泡点睛。
如何把技巧组合成顶会级概念图
按 figures4papers 的设计规范(见 design-theory.md),一份"不出错"的组合清单:
| 要素 | 推荐做法 |
|---|---|
| 配色 | 蓝=所提方法,红=对比/强调,青/紫=辅助;参考 PALETTE |
| 字体 | sans-serif +text.usetex=True,数学标签更专业 |
| 坐标轴 | 概念图直接set_axis_off(),只保留手绘 x/y/z 三轴箭头 |
| 导出 | dpi=300,同时输出 PNG 与 PDF 矢量版 |
| 布局 | 多面板横排叙事,tight_layout(pad=2)收尾 |
💡 小技巧:给每个小面板底部加一个Line2D假句柄 +legend的"图例胶囊"(如 "Dispersion loss"),既当图例又当标题。
相关文件速查
- 测地线弧 + 朗伯着色完整实现:plot_illustration.py
- 着色圆盘 + 点云采样:plot_idea.py
- 成品图:illustration.png、idea.png
- 绘图规范与调色板:scientific-figure-making/references/
总结
figures4papers 证明:顶会概念示意图 = 2D 圆盘 + 朗伯着色 + SLERP 测地线弧 + 语义化配色。你不需要掌握复杂的 3D 渲染,只需几十行 matplotlib 代码,就能让"球面上的点被相互推开"这类抽象算法一目了然 ✨。
【免费下载链接】figures4papersMy Python scripts to make high-quality figures for publications in top AI conferences and journals.项目地址: https://gitcode.com/gh_mirrors/fi/figures4papers
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考