在计算材料科学与分子模拟领域,一张高质量的晶体结构图往往能决定论文的第一印象。
传统截图工具粗糙、难以控制视角、更无法直接输出矢量图;而商业软件又价格不菲。今天给大家安利一款完全开源、轻量、专为科研设计的 Python 工具——hofmann。
它重新实现了经典的 XBS 球棍模型渲染思路,却用现代 Python 生态带来了出版级输出与流畅动画能力。
它是什么?
hofmann 是由英国计算材料科学家 Benjamin Morgan 开发的开源项目,名字取自 1865 年最早制作球棍分子模型的化学家 August Wilhelm von Hofmann。
它的核心能力可以概括为一句话:
把晶体或分子结构,渲染成深度排序、可出版质量的球棍图像,并支持轨迹动画。
支持输出格式:
- 静态图:SVG、PDF、PNG(矢量优先,适合投稿)
核心亮点:
- 出版级静态输出:基于 matplotlib,深度排序球棍渲染,细节清晰
- 轨迹动画:支持 .mv 文件,可按帧上色,直接导出 GIF / MP4
- 无缝对接主流工具:原生支持 ASE Atoms 和 pymatgen Structure
- 交互式查看器:鼠标旋转、缩放,键盘控制,调好视角后一键导出
- 纯 Python + matplotlib,依赖少,安装简单
目前最新版本为 v0.20.0,已支持部分占据 / 混合占据位点等实用功能。
安装方式:
基础安装:
pip install hofmann
需要对接 ASE:
pip install "hofmann[ase]"
需要对接 pymatgen:
pip install "hofmann[pymatgen]"
需要导出动画:
pip install "hofmann[animation]"
环境要求:Python 3.11+,numpy、matplotlib、scipy 等。
快速上手示例:
1. 从 XBS 文件直接渲染
from hofmann import StructureScenescene = StructureScene.from_xbs("structure.bs")scene.render_mpl("output.svg")
2. 从 ASE 结构生成
from ase.build import bulkfrom hofmann import StructureScene, BondSpecatoms = bulk("Si", "diamond", a=5.43)bonds = [BondSpec(species=("Si", "Si"), max_length=2.8)]scene = StructureScene.from_ase(atoms, bonds)scene.render_mpl("si.pdf")
3. 从 pymatgen Structure 生成
from pymatgen.core import Lattice, Structurefrom hofmann import StructureScene, BondSpeclattice = Lattice.cubic(5.43)structure = Structure( lattice, ["Si"] * 8, [[0.0, 0.0, 0.0], [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5], [0.25, 0.25, 0.25], [0.75, 0.75, 0.25], [0.75, 0.25, 0.75], [0.25, 0.75, 0.75]],)bonds = [BondSpec(species=("Si", "Si"), max_length=2.8)]scene = StructureScene.from_pymatgen(structure, bonds)scene.render_mpl("si.pdf")
4. 控制视角
scene.view.look_along([1, 1, 0]) # 沿 [110] 方向观察scene.view.zoom = 1.5scene.view.perspective = 0.3# 轻微透视scene.render_mpl("rotated.svg")
调好交互视角后,还可以直接复用:
view, style = scene.render_mpl_interactive()scene.view = viewscene.render_mpl("final.svg", style=style)
适合谁用?
- 已经在用 ASE / pymatgen 的用户(几乎零成本接入)
项目信息:
- GitHub:https://github.com/bjmorgan/hofmann
- 文档:https://hofmann.readthedocs.io
- 作者:Benjamin Morgan(bjmorgan)
目前仓库已有完整文档、示例、测试与 ReadTheDocs 支持,社区也在持续更新。
如果你经常需要画晶体结构图,强烈建议试一试。真正用过之后会发现,很多以前要靠手动调整或截图修图的工作,现在几行代码就能搞定,而且输出质量直接达到投稿标准。
有兴趣的同学可以直接去 GitHub 点个 Star 支持一下开源项目~