蛋白质结构可视化PyMOL¶
一句话概述:PyMOL是蛋白质3D结构可视化的"PS软件",能把PDB文件变成发表级的分子结构图,是结构生物学和药物设计必备工具。
核心知识点表¶
| 知识点 | 白话解释 | 重要程度 |
|---|---|---|
| PDB文件 | 记录蛋白质每个原子3D坐标的"建筑图纸" | ⭐⭐⭐⭐⭐ |
| PyMOL | 把PDB坐标渲染成漂亮3D图片的软件 | ⭐⭐⭐⭐⭐ |
| 表示模式 | cartoon(卡通)、surface(表面)、stick(棍状)等不同"画风" | ⭐⭐⭐⭐ |
| 选择语法 | 指定要操作哪些原子/残基的"选择器" | ⭐⭐⭐⭐ |
| AlphaFold | DeepMind的AI蛋白质结构预测工具,预测结构也能用PyMOL看 | ⭐⭐⭐⭐ |
| 结构叠合 | 把两个蛋白质结构"对齐"比较差异 | ⭐⭐⭐ |
一、PyMOL安装¶
1.1 conda安装(推荐)¶
# 创建专用conda环境
conda create -n pymol python=3.10 # 创建Python3.10环境
conda activate pymol # 激活环境
# 安装开源版PyMOL
conda install -c conda-forge pymol-open-source # 从conda-forge安装开源版
# 验证安装
pymol --version # 查看PyMOL版本
1.2 pip安装¶
# Linux需要先安装依赖
sudo apt-get install -y libgl1-mesa-glx libglu1-mesa # 安装OpenGL依赖(Ubuntu)
# pip安装
pip install pymol-open-source # pip安装开源版PyMOL
二、基本操作¶
2.1 加载蛋白质结构¶
# ========== PyMOL命令行操作 ==========
# 在PyMOL命令行中输入以下命令
# 方法一:直接从PDB数据库获取结构
fetch 6LU7 # 从RCSB PDB下载编号6LU7的结构(新冠病毒主蛋白酶)
# 方法二:加载本地PDB文件
load /path/to/protein.pdb # 加载本地PDB文件
# 方法三:加载AlphaFold预测结构
fetch AF-P04637-F1, type=mmCIF # 获取AlphaFold预测的p53结构
# 查看已加载的对象
get_object_list # 列出所有已加载的分子对象
2.2 表示模式切换¶
# ========== 常用表示模式 ==========
# 卡通模式(最常用,显示二级结构)
show cartoon # 显示卡通模式:α螺旋=螺旋,β折叠=箭头
# 棍状模式(显示每个化学键)
show sticks # 显示棍状模式:每根棍子=一个化学键
# 球棍模式(原子=球,键=棍)
show ball_and_stick # 球棍模式
# 表面模式(显示蛋白质表面,看口袋)
show surface # 分子表面模式
# 线框模式(最简单)
show lines # 线框模式
# 组合显示(常用技巧)
hide everything # 先隐藏所有
show cartoon # 显示整体卡通
show sticks, resi 145 # 只对145号残基显示棍状
2.3 选择语法(Selection Algebra)¶
# ========== 选择语法 速学 ==========
# 按链选择
select chain_A, chain A # 选择A链
# 按残基编号选择
select active_site, resi 41+145+163 # 选择41、145、163号残基(活性位点)
# 按残基范围选择
select helix1, resi 10-30 # 选择10到30号残基
# 按残基类型选择
select all_cys, resn CYS # 选择所有半胱氨酸
# 按原子名称选择
select backbone, name CA+C+N+O # 选择主链原子
# 按元素选择
select metals, elem ZN+FE+MG # 选择锌、铁、镁离子
# 组合选择(逻辑运算)
select binding, (resi 41+145) and chain A # A链的41和145残基
select nearby, byres (resn ATP around 5) # ATP周围5埃内的残基
# 按二级结构选择
select helices, ss H # 选择所有α螺旋
select sheets, ss S # 选择所有β折叠
三、发表级图片制作¶
3.1 PyMOL脚本:制作蛋白质结构图¶
# 保存为 make_figure.pml,在PyMOL中运行:@make_figure.pml
# ========== 加载和准备 ==========
reinitialize # 清空所有对象
fetch 6LU7, async=0 # 下载新冠病毒主蛋白酶结构
remove solvent # 删除水分子
remove resn HOH # 确保删除所有水
# ========== 基本显示设置 ==========
bg_color white # 白色背景(发表要求)
set ray_opaque_background, 1 # 不透明背景
hide everything # 隐藏所有
show cartoon # 显示卡通模式
# ========== 着色方案 ==========
# 按链着色
color marine, chain A # A链蓝色
color salmon, chain B # B链粉色(如果有)
# 按二级结构着色
set cartoon_highlight_color, grey70 # 螺旋高光颜色
color red, ss H # α螺旋红色
color yellow, ss S # β折叠黄色
color green, ss L+"" # 环区绿色
# ========== 活性位点高亮 ==========
# 显示催化三联体
select catalytic, resi 41+145 and chain A # 选择催化残基
show sticks, catalytic # 棍状显示
color cyan, catalytic # 青色高亮
set stick_radius, 0.15, catalytic # 设置棍的粗细
# 标注残基名称
label catalytic and name CA, "%s%s" % (resn, resi) # 在CA原子处标注残基名+编号
set label_size, 18 # 标签字号
set label_color, black # 标签颜色
# ========== 渲染设置 ==========
set cartoon_fancy_helices, 1 # 精美螺旋效果
set cartoon_smooth_loops, 1 # 平滑环区
set cartoon_tube_radius, 0.2 # 管状半径
set antialias, 2 # 抗锯齿级别
set ambient, 0.3 # 环境光
set spec_reflect, 0.3 # 反射光
# ========== 调整视角 ==========
orient # 自动调整视角,让蛋白质居中
zoom complete=1 # 缩放到合适大小
# ========== 导出高清图片 ==========
ray 3000, 2400 # 渲染3000x2400像素
png protein_structure.png, dpi=300 # 保存300dpi的PNG图片
print("图片已保存到 protein_structure.png")
3.2 Python脚本批量生成结构图¶
#!/usr/bin/env python3
"""批量生成蛋白质结构图(PyMOL Python API)"""
import pymol # 导入PyMOL模块
from pymol import cmd # 导入命令模块
def make_structure_figure(pdb_id, output_name):
"""为指定PDB生成结构图"""
cmd.reinitialize() # 重置PyMOL状态
cmd.fetch(pdb_id, async_=0) # 下载PDB结构
cmd.remove("solvent") # 删除溶剂
# 显示设置
cmd.bg_color("white") # 白色背景
cmd.hide("everything") # 隐藏所有
cmd.show("cartoon") # 显示卡通
# 按二级结构着色
cmd.color("marine", "ss H") # α螺旋蓝色
cmd.color("yellow", "ss S") # β折叠黄色
cmd.color("gray80", "ss L+''") # 环区灰色
# 渲染设置
cmd.set("cartoon_fancy_helices", 1) # 精美螺旋
cmd.set("ray_opaque_background", 1) # 不透明背景
cmd.orient() # 调整视角
# 导出
cmd.ray(2400, 2000) # 渲染分辨率
cmd.png(f"{output_name}.png", dpi=300) # 保存图片
print(f"已生成: {output_name}.png")
# ========== 批量处理 ==========
pdb_list = {
"6LU7": "SARS-CoV-2_Mpro", # 新冠主蛋白酶
"1BNA": "B-DNA", # B型DNA双螺旋
"4HHB": "Hemoglobin", # 血红蛋白
"1UBQ": "Ubiquitin", # 泛素
}
# 启动PyMOL(无GUI模式)
pymol.finish_launching(["pymol", "-cq"]) # -c=命令行模式, -q=安静模式
for pdb_id, name in pdb_list.items(): # 遍历每个PDB
make_structure_figure(pdb_id, name) # 生成结构图
print("所有结构图生成完毕!")
四、结构比较与叠合¶
# ========== PyMOL命令行:结构叠合 ==========
# 加载两个结构
fetch 6LU7, protein1 # 加载第一个结构
fetch 7L11, protein2 # 加载第二个结构
# 结构叠合(对齐)
align protein1, protein2 # 基于序列的叠合(最常用)
# 输出:RMSD = X.XX 说明叠合质量,越小越相似
# 如果序列差异大,用super命令
super protein1, protein2 # 基于结构的叠合(不依赖序列)
# 着色区分
color blue, protein1 # 第一个蛋白蓝色
color red, protein2 # 第二个蛋白红色
# 计算RMSD
rms_cur protein1, protein2 # 计算当前位置的RMSD
# 显示结构差异
# RMSD颜色映射:蓝=相似,红=差异大
spectrum b, blue_white_red, protein1 # 按B因子着色看灵活性
五、配体结合位点分析¶
# ========== 分析蛋白质-配体结合 ==========
fetch 6LU7, async=0 # 加载含配体的结构
# 找到配体
select ligand, organic # 选择所有有机小分子(配体)
show sticks, ligand # 棍状显示配体
color yellow, ligand # 配体黄色
# 显示结合口袋
select pocket, byres (ligand around 4.5) # 配体4.5埃内的残基=结合口袋
show sticks, pocket # 棍状显示口袋残基
color cyan, pocket # 口袋青色
# 显示氢键
distance hbonds, ligand, pocket, 3.5, mode=2 # 找配体和口袋间的氢键(3.5埃内)
set dash_color, red, hbonds # 氢键虚线红色
set dash_width, 2, hbonds # 虚线宽度
# 显示蛋白表面(半透明)
show surface, protein1 # 显示蛋白表面
set transparency, 0.7 # 设置70%透明度
常见报错与解决¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
Error: unable to open file | 文件路径错误或文件不存在 | 检查路径,用绝对路径 |
OpenGL error | 显卡驱动问题 | 更新显卡驱动,或用pymol -c命令行模式 |
fetch failed | 网络问题或PDB ID不存在 | 检查网络连接,确认PDB ID正确 |
no atoms selected | 选择语法写错了 | 检查选择表达式,用select测试 |
RMSD is very large | 结构差异太大或对齐失败 | 先用super代替align,检查物种是否匹配 |
ray takes too long | 渲染分辨率太高或结构太复杂 | 降低ray分辨率,先用draw快速预览 |
module 'pymol' not found | Python环境没装PyMOL | 用conda安装:conda install -c conda-forge pymol-open-source |
速查表¶
========================================
PyMOL蛋白质结构可视化 速查表
========================================
【启动PyMOL】
GUI模式 → pymol
命令行模式 → pymol -c
安静模式 → pymol -cq
运行脚本 → pymol script.pml 或 @script.pml
【加载结构】
从PDB下载 → fetch 6LU7
加载本地文件 → load protein.pdb
加载AlphaFold → fetch AF-P04637-F1, type=mmCIF
【表示模式】
卡通(二级结构) → show cartoon
棍状(化学键) → show sticks
表面(分子表面) → show surface
球棍模式 → show ball_and_stick
线框 → show lines
全隐藏 → hide everything
【选择语法】
按链 → chain A
按残基号 → resi 41+145
按残基范围 → resi 10-30
按残基名 → resn CYS
按原子名 → name CA
按元素 → elem ZN
按二级结构 → ss H(螺旋)/ ss S(折叠)
周围X埃 → around 5
包含完整残基 → byres
【着色】
单色 → color red, selection
按链 → util.cbc(自动按链着色)
按二级结构 → color red, ss H
B因子光谱 → spectrum b, blue_white_red
按残基类型 → util.cbag(按原子类型着色)
【结构比较】
序列对齐叠合 → align obj1, obj2
结构叠合 → super obj1, obj2
计算RMSD → rms_cur obj1, obj2
【导出图片】
渲染 → ray 3000, 2400
保存PNG → png output.png, dpi=300
保存会话 → save session.pse
【快捷键】
旋转 → 鼠标左键拖动
平移 → 鼠标中键拖动
缩放 → 鼠标右键拖动 / 滚轮
选择原子 → 鼠标左键点击
重置视角 → orient
【面试常问】
Q: RMSD是什么意思?
A: 均方根偏差,衡量两个结构叠合后的平均原子位移,越小越相似
Q: B因子是什么?
A: 温度因子,反映原子振动幅度,越大说明该区域越灵活/无序
Q: cartoon模式显示的是什么?
A: 蛋白质的二级结构:螺旋=α螺旋,箭头=β折叠,管子=环区
========================================
参考资料:PyMOL官方文档 | pymol.org | RCSB PDB | AlphaFold Protein Structure Database