当前位置:首页>python>hofmann程序:Python晶体结构可视化神器—论文级球棍模型一键生成

hofmann程序:Python晶体结构可视化神器—论文级球棍模型一键生成

  • 2026-09-02 16:40:04
hofmann程序:Python晶体结构可视化神器—论文级球棍模型一键生成

在计算材料科学与分子模拟领域,一张高质量的晶体结构图往往能决定论文的第一印象。

传统截图工具粗糙、难以控制视角、更无法直接输出矢量图;而商业软件又价格不菲。今天给大家安利一款完全开源、轻量、专为科研设计的 Python 工具——hofmann。

它重新实现了经典的 XBS 球棍模型渲染思路,却用现代 Python 生态带来了出版级输出与流畅动画能力。

它是什么?

hofmann 是由英国计算材料科学家 Benjamin Morgan 开发的开源项目,名字取自 1865 年最早制作球棍分子模型的化学家 August Wilhelm von Hofmann。

它的核心能力可以概括为一句话:

把晶体或分子结构,渲染成深度排序、可出版质量的球棍图像,并支持轨迹动画。

支持输出格式:

  • 静态图:SVG、PDF、PNG(矢量优先,适合投稿)
  • 动画:GIF、MP4

核心亮点:

  • 出版级静态输出:基于 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
  • 许可证:MIT
  • 作者:Benjamin Morgan(bjmorgan)

目前仓库已有完整文档、示例、测试与 ReadTheDocs 支持,社区也在持续更新。

如果你经常需要画晶体结构图,强烈建议试一试。真正用过之后会发现,很多以前要靠手动调整或截图修图的工作,现在几行代码就能搞定,而且输出质量直接达到投稿标准。

有兴趣的同学可以直接去 GitHub 点个 Star 支持一下开源项目~

最新文章

随机文章