4. PyMOL 选择与显示:从语法到视觉呈现

这一章,我们聊聊 PyMOL 最核心的操作——怎么把分子“挑”出来,再让它“好看”。说白了,就是选择语法、颜色和表示方式。很多新手都卡在这一步:明明加载了结构,却不知道怎么单独显示某个残基,或者把活性位点高亮出来。别急,我带你捋一遍。

4.1 选择语法:PyMOL 的“搜索引擎”

PyMOL 的选择语法,其实就是一个灵活的字符串表达式。你用它告诉 PyMOL:“我要这部分原子”。我个人习惯用选择语法来快速构建显示方案,效率很高。

4.1.1 基础选择

最基本的,是用对象名加选择器。比如:

select 1ubq                     # 选择整个对象
select chain A                  # 选择 A 链
select resi 1-10                # 选择 1 到 10 号残基
select resn ALA                 # 选择所有丙氨酸
select name CA                  # 选择所有 Cα 原子

你可能会问,为什么用 `resi` 而不是 `residue`?PyMOL 就是这么定义的,别问,记住就行。

4.1.2 逻辑操作:与、或、非

真实项目中,很少只用单一条件。比如我只想选 A 链上的丙氨酸,怎么办?用逻辑操作符:

select (chain A) and (resn ALA)        # A 链上的丙氨酸
select (chain A) or (chain B)          # A 链或 B 链
select (not chain A)                   # 除 A 链外所有
select (resi 1-50) and (name CA)       # 前 50 个残基的 Cα

记住一个原则:用小括号把条件分组,这样可读性高,也不容易出错。我曾经在分析一个大型复合物时,漏了括号,结果选了大半个结构,排查了半天。

4.1.3 选择扩展:基于属性

PyMOL 还能基于更细粒度的原子属性选择,比如 B-factor(温度因子)、坐标范围。这在分析结构柔性时特别有用:

select b < 30                          # 选择 B-factor 小于 30 的原子
select (x > 10) and (x < 20)           # 选择 x 坐标在 10 到 20 之间的原子
select ss H                             # 选择所有 α-螺旋

快速记忆口诀:

  • resi:按残基编号
  • resn:按残基名称
  • name:按原子名称
  • chain:按链
  • ss:按二级结构
  • elem:按元素

4.2 颜色:让分子“说话”

颜色不只是为了好看。在结构生物学中,颜色承载着信息——比如通过颜色区分亚基、显示突变位点、或标记配体结合区域。

4.2.1 预定义颜色

PyMOL 内置了丰富的颜色名称:

color red, selection-name       # 红色
color blue, selection-name      # 蓝色
color green, selection-name     # 绿色
color yellow, selection-name    # 黄色
color magenta, selection-name   # 品红
color cyan, selection-name      # 青色
color salmon, selection-name    # 三文鱼色(常用于配体)

我个人习惯用这些内置色,因为不用记RGB值。但如果你需要精确颜色,PyMOL也支持自定义:

color 0.1 0.5 0.9, selection-name    # 自定义 RGB (0-1 范围)

4.2.2 常用着色方案

不同场景有不同的着色思路。下表是我整理的经验:

场景 推荐方案 代码
按链(亚基区分) spectrum 或手选
spectrum chain, selection
按二级结构 预定义二级结构色
color spectrum, ss, selection
按 B-factor(温度因子) 冷暖渐变
spectrum b, blue_white_red, selection
按残基类型(疏水/带电) 手动定义分组色
color grey, resn ALA+VAL+LEU+ILE+PHE+TYR+TRP

你想想看,B-factor 着色能直观展示分子的“抖动”区域。蓝色表示稳定,红色表示柔性高。我做分子对接分析时,经常用这个来确认结合位点的稳定性。

我的习惯:研究结构时,先用 spectrum 给全蛋白上个渐变色,瞬间就能看出热点区域。然后局部细化,用自定义颜色高亮关键残基。

4.3 表示方式:从线到球

PyMOL 提供了多种表示方式,每种适合展示不同的结构特征。我习惯用“组合拳”——对同一分子,用不同表示法展示不同部分。

4.3.1 常用的表示方式

  • 卡通(cartoon):展示蛋白质骨架,最适合看二级结构。
  • 线型(lines):显示所有原子间的键,轻量。
  • 棒型(sticks):显示键的粗细和方向,适合配体或侧链。
  • 球棍(spheres):按原子范德华半径显示,适合突出特定原子。
  • 表面(surface):显示分子表面,适合分析空腔和结合口袋。
  • 主链(ribbon):比卡通更简化,只显示主链走向。

具体命令很简单:

show cartoon, selection            # 显示为卡通
show sticks, selection             # 显示为棒状
show spheres, selection            # 显示为球体
show lines, selection              # 显示为线型
show surface, selection            # 显示为表面

隐藏表示用 hide:

hide lines, selection              # 隐藏线型表示

4.3.2 组合示例:突出结合位点

我在做药物设计项目时,常用这样一个工作流:

# 整个蛋白用卡通表示,颜色按链分
show cartoon, 1ubq
color spectrum chain, 1ubq

# 活性位点残基用棒状表示,并高亮为红色
select active_site, resi 10-20+30-40
show sticks, active_site
color red, active_site

# 配体用球棍表示,突出与蛋白的接触
select ligand, resn LIG
show spheres, ligand
color magenta, ligand

这样一来,一眼就能分辨蛋白骨架、关键残基和配体。

小心性能问题:表面表示非常消耗显示资源。如果你处理的是大分子(>5000 原子),不要对整个分子用表面,否则 PyMOL 会卡到让你怀疑人生。我曾经用一个 2 万原子的复合物试过,那叫一个慢。

4.4 知识脉络:从语法到视觉

为了让你更直观地理解选择、颜色和表示方式之间的关系,我画了一张图:

PyMOL 选择与显示流程 1. 加载结构 (PDB 文件) 2. 选择语法 (选择器 + 逻辑操作) resi, resn, name, chain, ss, 属性 3a. 颜色 (预定义 / 自定义) red, blue, spectrum b, 自定义 RGB 3b. 表示方式 (show / hide) cartoon, sticks, spheres, surface 4. 组合呈现 (卡通+棒状+球棍) 层次感 / 信息密度 / 视觉对比 核心三要素 选择 → 颜色 → 表示

这个流程很清晰:先选好对象,再定颜色,最后上表示。顺序可以换,但逻辑得通。

4.5 实战技巧:组合拳和避坑

4.5.1 一个典型的组合操作

假设你有一个蛋白配体复合物,想要展示配体结合口袋:

# 第一步:加载结构
load 1ubq.pdb

# 第二步:给蛋白上卡通,按链着色
show cartoon, 1ubq
spectrum chain, 1ubq

# 第三步:选择配体周围 5 埃内的残基
select binding_pocket, byres (resi around 5 of resn LIG)
show sticks, binding_pocket
color orange, binding_pocket

# 第四步:给配体一个醒目的颜色
select ligand, resn LIG
show spheres, ligand
color magenta, ligand

# 第五步:去掉溶剂分子(如果存在)
hide lines, resn HOH

嗯,这里要注意 `byres` 这个关键词,它会把原子选择扩展为整个残基,这样你选的就不是零散原子,而是完整的氨基酸。

4.5.2 避坑指南:选择结果不按预期

我曾经犯过一个错:用 `select` 选了残基,然后用 `hide` 命令隐藏,结果怎么都隐藏不掉。后来发现是因为我忘了 `select` 只是创建一个命名选择,但并没有改变视口。你需要用 `deselect` 来清除选择,或者直接用 `show/hide` 配合命名选择。

正确做法:

# 错误示范
select active, resi 10-20
hide lines          # 这只会隐藏当前选中的原子,但 active 选择仍在

# 正确示范:用命名选择作为参数
hide lines, active

# 或者清空选择
deselect

命名选择的生命周期:一旦你用 select 创建了一个命名选择,它会一直存在于 PyMOL 的命名空间中,直到你显式删除它:delete active。不然它会积累很多旧选择,影响后续操作。

4.5.3 避坑指南:颜色覆盖问题

你可能会发现,对同一个原子先后用了两次 `color`,最后的颜色取决于最后一次调用。所以如果你想对某个子集单独上色,一定要先确保它没有被其他命令修改。

另外,`color` 和 `spectrum` 的区别:`color` 是纯色,`spectrum` 是渐变。如果你先用了 `color red`,再用 `spectrum b, selection`,`spectrum` 会覆盖之前的颜色。

我用一个简单的工作流来解决:先给整体上一个中性的颜色(比如灰色),然后逐个给关键区域上色。这样不易混乱。

4.6 本章小结

这一章我们讲了 PyMOL 选择的三大支柱:选择语法、颜色控制、表示方式。选择语法是基础,颜色是信息载体,表示方式决定视觉效果。三者结合,才能做出既科学又美观的结构图。

  • 选择语法:用 resi、resn、name、chain、ss、逻辑操作 (and、or、not) 来精准定位原子。
  • 颜色:color 纯色,spectrum 渐变色,自定义 RGB 也能用。
  • 表示方式:show / hide 加类型名,组合使用能提升信息密度。
  • 实战:先选再色后表示,命名选择要有清理意识,避免颜色覆盖。

最后送你一句话:好的结构图,不是把所有信息都堆上去,而是只展示你想让读者看到的那部分。