212

NGLView:Jupyter 中展示三维结构

NGLView 在 Jupyter 里交互展示结构与轨迹,适合边分析边看的工作流。这篇给出与 MDAnalysis/MDTraj 联动的用法和常见渲染技巧。

NGLView 是 NGL Viewer 的 Jupyter 封装,让你在 Notebook 里交互式旋转、缩放、播放轨迹。它的价值不在于出版级配图(那是 PyMOL 的活),而在于分析过程中随时看一眼——算完 RMSD 发现异常,立刻把那几帧调出来看看发生了什么。

安装

pip install nglview
jupyter labextension install nglview-js-widgets   # JupyterLab 3 之前需要
# JupyterLab 4 / Notebook 7 通常装完即可用

装完若显示空白,多半是前端扩展没装好——这是它最常见的问题,重启内核并检查扩展状态。

基本用法

import nglview as nv

# 直接看 PDB(本地或联网)
view = nv.show_file("complex.pdb")
view = nv.show_pdbid("1ake")
view
# 与 MDAnalysis 联动看轨迹
import MDAnalysis as mda
import nglview as nv

u = mda.Universe("topology.pdb", "traj.dcd")
view = nv.show_mdanalysis(u)
view.clear_representations()
view.add_cartoon("protein", color="sstruc")
view.add_licorice("not protein and not water", radius=0.3)
view.add_ball_and_stick("resname MOL")
view.center("resname MOL")
view
# 与 MDTraj 联动
import mdtraj as md
t = md.load("traj.dcd", top="topology.pdb")
view = nv.show_mdtraj(t[::10])      # 抽帧,避免卡顿

常用表示与控制

方法 用途
add_cartoon 蛋白主链,color="sstruc" 按二级结构上色
add_licorice / add_ball_and_stick 小分子、侧链
add_surface 分子表面,opacity=0.4 看口袋形状
add_spacefill 空间填充,看堆积
add_contact 显示接触与氢键
add_label 残基标签
view.frame = n 跳到指定帧
view.download_image() 导出当前视图为 PNG

看口袋的一段实用配置

view = nv.show_file("complex.pdb")
view.clear_representations()
view.add_surface("protein", opacity=0.35, color="white",
                 surfaceType="av", probeRadius=1.4)
view.add_cartoon("protein", color="grey")
view.add_ball_and_stick("resname MOL", color="element")
view.add_licorice("protein and (resname MOL around 4.5)", color="cyan")
view.center("resname MOL")
view._remote_call("setSize", target="Widget", args=["800px", "600px"])
view

半透明表面 + 配体棒状是观察口袋形状与配体贴合程度最直观的组合。拿到对接结果先这样看一眼,能很快发现配体是否真的落在口袋里、有没有一半悬在溶剂中。

性能与局限

  • 帧数要控制:几千帧的轨迹会让浏览器卡顿。用切片抽帧(t[::10])或只加载感兴趣的片段。
  • 原子数要控制:显示所有水分子会严重拖慢渲染,通常先去水。
  • 不适合出版配图:分辨率与渲染质量不如 PyMOL 的 ray。定稿配图仍应回到 PyMOL(见 211《PyMOL 开源版》)。
  • Notebook 导出问题:交互组件在导出的 HTML 或 GitHub 上通常不显示,分享时需另存静态图。

上手提示

  • 定位是「分析过程中随时看一眼」,不是出版配图;
  • 与 MDAnalysis / MDTraj 一行联动,是它最顺手的用法;
  • 半透明表面 + 配体棒状,快速判断对接姿势是否落在口袋里;
  • 轨迹务必抽帧、先去水,否则浏览器会卡。

延伸资源