211

PyMOL 开源版:结构可视化和作图流程

PyMOL 开源版满足多数结构可视化与作图需求,掌握选择语法与渲染即可出版级配图。这篇给出脚本化作图流程与一套可直接复用的出图设置。

PyMOL 是结构生物学最通用的可视化工具。开源版(open-source PyMOL)功能覆盖绝大多数需求,可自行编译或通过 conda 安装。它真正的价值在于可脚本化——把出图流程写成 .pml 脚本或 Python 代码,就能批量、可复现地生成配图。

安装

mamba install -c conda-forge pymol-open-source
pymol -cq script.pml        # -c 无界面,-q 静默,用于批量出图

选择语法

表达式 含义
chain A and resi 45-60 A 链 45–60 号残基
byres (polymer within 5 of resn MOL) 配体 5 Å 内的完整残基
resn MOL and not elem H 配体重原子
ss H / ss S 螺旋 / 折叠
solvent 水分子
organic 小分子(非聚合物)

byres ... within ... 是做结合位点图最常用的组合:选出配体周围的完整残基而不是被切断的原子片段。

一套可直接复用的出图脚本

# pocket.pml —— 蛋白-配体结合位点配图
load complex.pdb, cplx
hide everything
bg_color white

# 蛋白:卡通表示 + 浅色
show cartoon, polymer
color grey80, polymer
set cartoon_transparency, 0.35

# 配体:棒状 + 醒目配色
select lig, resn MOL and not elem H
show sticks, lig
color yellow, lig and elem C
util.cnc("lig")                    # 按元素上色(C 保留,其余标准色)

# 口袋残基:细棒 + 标签
select pocket, byres (polymer within 4.5 of lig) and not elem H
show sticks, pocket
color cyan, pocket and elem C
set stick_radius, 0.15, pocket
label pocket and name CA, "%s%s" % (resn, resi)

# 氢键
distance hbonds, lig, pocket, 3.5, mode=2
color black, hbonds
set dash_gap, 0.3
set label_size, 16

# 视角与渲染
orient lig
zoom lig, 5
set ray_opaque_background, 1
set ray_shadows, 0
set antialias, 2
set ray_trace_mode, 0
ray 2400, 1800
png pocket.png, dpi=300

批量出图时用 pymol -cq pocket.pml,配合 shell 循环即可对一批复合物统一风格出图——这在写报告或比较多个对接姿势时非常省时间。

出版级配图的几个要点

  • ray 而不是直接截图ray 做光线追踪渲染,边缘平滑、质量高。指定分辨率后再 png ... dpi=300
  • 白底 + 不透明背景bg_color whiteset ray_opaque_background, 1,避免论文排版时出现透明通道问题。
  • 关掉阴影set ray_shadows, 0,科学配图里阴影通常只增加噪声。
  • 配色克制:蛋白用中性浅灰、配体用一个醒目色、关键残基用第二个色,三色以内最清晰。注意红绿色盲友好性。
  • 视角可复现:用 get_view 拿到当前视角矩阵,写进脚本里 set_view,保证多张图角度一致。

Python API

from pymol import cmd

cmd.load("complex.pdb", "cplx")
cmd.select("lig", "resn MOL")
print(cmd.get_extent("lig"))            # 配体包围盒,可用于设对接盒子
contacts = cmd.find_pairs("lig", "polymer within 4 of lig", cutoff=4.0)
print(len(contacts), "contacts")
cmd.png("out.png", width=1600, height=1200, dpi=300, ray=1)

cmd.get_extent 有个实用副产品:直接拿到配体的包围盒坐标,用来设置对接盒子中心与尺寸,省掉手工估算。

上手提示

  • 把出图写成 .pml 脚本,风格统一且可复现,远胜手工点击;
  • 出版图必须用 ray 渲染,配白底、关阴影、开抗锯齿;
  • byres ... within ... 是画结合位点的标准选择写法;
  • cmd.get_extent 可直接算出对接盒子参数。

延伸资源