PyMOL — 蛋白质三维结构可视化与分析工具
一句话说明
PyMOL 是最流行的蛋白质结构可视化工具,可以用 GUI 鼠标操作或写 Python 脚本批量处理——旋转结构、着色、测量距离、生成出版级图片或动画。白话理解:蛋白质 3D 结构的"Photoshop",既能点击操作,又能写脚本批量出图。
安装与配置
# 方法1:conda 安装(推荐,包含 pymol-open-source)
conda install -c conda-forge pymol-open-source # 安装开源版 PyMOL(当前 v3.0+)
# 方法2:商业版(支持更多高级渲染)
# 从 Schrödinger 官网下载(学术免费授权)
# https://pymol.org/edu/
# 确认安装
pymol --version # 命令行确认版本(v3.0+)
python -c "import pymol; print(pymol.__version__)" # Python 中确认
# 启动 PyMOL(GUI)
pymol # 打开图形界面
# 启动 PyMOL(无 GUI,脚本模式)
pymol -cq my_script.py # -c=无GUI,-q=静默模式
核心用法
PyMOL 命令行(GUI 内)
# 以下命令在 PyMOL 的命令栏(底部文本框)输入
# 载入结构
load 1abc.pdb # 载入本地 PDB 文件
fetch 1ABC # 从 RCSB 数据库下载 1ABC 结构
# 基础显示
show cartoon # 显示卡通(ribbon)表示
show sticks # 显示棒状(原子级别)
show surface # 显示分子表面
hide everything # 隐藏所有显示
show cartoon, chain A # 只显示 A 链的卡通
# 着色
color blue, chain A # A 链着色蓝色
color red, chain B # B 链着色红色
spectrum b # 按 B factor(温度因子)上色
spectrum count, rainbow, all # 用彩虹色从 N 端到 C 端着色
# 视图操作
orient # 自动调整最佳视角
zoom chain A # 缩放到 A 链
center resi 100 # 居中到第100号残基
Python 脚本批量处理
# 脚本文件 visualize.py,用 pymol -cq visualize.py 运行
import pymol # 导入 PyMOL 库
from pymol import cmd # 导入命令接口
pymol.finish_launching(['pymol', '-c']) # 启动 PyMOL(无 GUI 模式)
# 载入蛋白质结构
cmd.load("protein.pdb", "protein") # 载入 PDB 文件,命名为 protein
# 设置显示方式
cmd.show("cartoon", "protein") # 显示卡通表示
cmd.hide("lines", "protein") # 隐藏线框
# 按二级结构着色
cmd.color("marine", "ss h") # α螺旋着色为深蓝色(marine)
cmd.color("wheat", "ss s") # β折叠着色为小麦色(wheat)
cmd.color("gray80", "ss l+''") # loop区着色为浅灰色
# 高亮活性位点残基
cmd.show("sticks", "resi 50+51+85") # 50、51、85号残基显示棒状
cmd.color("red", "resi 50+51+85") # 活性位点着红色
# 设置背景和渲染参数
cmd.bg_color("white") # 白色背景
cmd.set("ray_shadows", 0) # 关闭阴影(出版图常用)
cmd.set("antialias", 2) # 抗锯齿(图片更清晰)
# 调整视角
cmd.orient("protein") # 自动最优视角
cmd.zoom("protein", buffer=5) # 缩放并留5Å边距
# 光线追踪渲染并保存
cmd.ray(2400, 1800) # 光线追踪:2400x1800 像素
cmd.png("protein_structure.png", dpi=300) # 保存 PNG,300 DPI
# 退出
cmd.quit()
参数详解
| 命令 | 含义 |
|---|
show cartoon | 显示 ribbon/卡通图(二级结构) |
show surface | 显示分子表面(静电势等) |
show sticks | 显示棒状(原子键) |
show spheres | 显示球状(范德华半径) |
color spectrum | 按某属性渐变着色 |
set transparency | 设置透明度(0-1) |
select sele, resi 50-60 | 选择50-60号残基 |
distance d1, resi 50, resi 85 | 测量两残基距离 |
align obj1, obj2 | 结构叠合 |
super obj1, obj2 | 结构超叠合(更准确) |
ray | 光线追踪(高质量渲染) |
实战案例
案例:比较两个结构并计算 RMSD
from pymol import cmd # 导入命令接口
# 载入两个结构
cmd.load("predicted.pdb", "predicted") # 预测结构
cmd.load("experimental.pdb", "experimental") # 实验结构(参考)
# 结构叠合(align:先做序列比对再叠合)
rmsd_result = cmd.align("predicted", "experimental") # 叠合
rmsd = rmsd_result[0] # RMSD 值(Å)
n_atoms = rmsd_result[1] # 用于计算的原子数
print(f"RMSD: {rmsd:.3f} Å") # 打印 RMSD
print(f"叠合原子数: {n_atoms}")
# 着色:差异大的区域用红色表示
cmd.spectrum("b", "rainbow", "predicted") # 按 B factor 着色
# 保存对比图
cmd.show("cartoon", "all") # 所有结构显示卡通
cmd.ray(1600, 1200) # 光线追踪渲染
cmd.png("comparison.png", dpi=300) # 保存图片
案例:绘制蛋白质表面静电势
from pymol import cmd
from pymol.plugins import initialize
# 载入结构
cmd.load("protein.pdb", "prot")
cmd.remove("solvent") # 移除水分子
# 加氢原子(计算静电势需要)
cmd.h_add("prot") # 添加氢原子
# 计算并显示静电势表面
# 需要 APBS 或 PDB2PQR 工具(单独安装)
# 在 PyMOL 中直接用 plugin
cmd.do("show surface, prot") # 显示表面
cmd.do("set surface_color, white, prot") # 先设为白色
# 打开 APBS/PDB2PQR 插件计算静电:Plugin → APBS Tools
常见报错与解决
| 报错 | 原因 | 解决方法 |
|---|
Invalid selection name | 选择语法错误 | 检查括号和引号;select sele, chain A |
Unable to open file | 文件路径错误 | 用绝对路径或先 cd 到文件目录 |
Error: ray failed | 渲染内存不足 | 降低 ray 分辨率;关闭其他程序 |
| 图片文字乱码 | Linux 字体问题 | 用 label 时设置 set label_font_id, 7 |
| 结构显示不完整 | PDB 文件有 TER 中断 | 用 remove solvent 后重新 show cartoon |
速查表
# 安装
conda install -c conda-forge pymol-open-source
# 启动方式
pymol # GUI 模式
pymol -cq xxx.py # 无 GUI 脚本模式
# PyMOL 命令行快捷键
F1 帮助 F2 线框 F3 棒状 F4 球棍 F5 卡通
鼠标左键旋转 右键缩放 中键平移
# 常用命令
fetch 1abc # 从 PDB 数据库下载结构
load xxx.pdb # 加载本地文件
show cartoon # 卡通显示
color chainbows # 按链彩虹色
align A, B # A 叠合到 B
measure_all # 测量所有距离/角度
save output.pdb # 保存结构
ray 2400,1800; png x.png # 渲染并保存
# 版本:PyMOL 3.0+(2024年,开源版)