尧图精选

PyMOL使用教程:命令行选择、对齐测量与批量出图

🕒 发布时间:2026/9/18 3:41:52 📁 来源:尧图网络
简介这份《pymol使用教程》汇编PDF面向结构生物学、生物信息学方向的学生与科研人员以及刚接触分子三维可视化的初学者帮助读者在缺少系统中文资料的情况下快速掌握PyMOL的安装配置与日常操作。资源为单个PDF文件压缩包约5.96MB内容由多篇学习笔记整理汇编而成按安装、鼠标操作、基本命令的脉络依次展开便于按需检索与对照练习。教程从源码编译讲起分别说明Windows下CygWin与Linux下Python、Pmw、OpenGL、libpng等依赖的安装思路并解释External GUI与Viewer Window的界面分工、命令行与内部GUI的配合方式随后介绍load加载pdb文件、show与hide切换cartoon、ribbon、surface等显示模式以及旋转、缩放、平移、设定旋转中心与移动剪切平面的鼠标操作还穿插log_open记录命令等实用技巧。目前已有475人学习适合需要动手复现蛋白质结构图的中高级读者。1. 结构图不是截图就完事一份 PyMOL 使用教程真正要解决的问题组会上把蛋白-配体结合图投到屏幕上导师问「这个氢键多少埃」「换个角度看二聚体界面」如果只会用鼠标拖接下来二十分钟就是灾难。PyMOL 的价值不在能画出好看的卡通图而在于它有一套完整的命令语言加载哪个结构、选中哪些残基、用什么表征、视角转到哪、导出多少像素全都能写成文字复现。网上流传的 PyMOL 使用教程往往散在博客、论坛帖和实验室祖传脚本里把零散命令汇编成一条能走通的路径才是这份东西真正的用处。阅读对象有三类刚进组、第一次打开 PyMOL 的研究生做酶工程或分子对接、需要把结果画成图的工程师要写方法学部分、必须让别人复现同一张图的同学。从安装固定环境开始经过选择语法与表征走到对齐、测量和批量出图最后落在会话复现与数值自检这些返修时才想起的细节上。2. PyMOL 软件安装与首次启动先把运行环境钉死装 PyMOL 最常见的翻车不是装不上而是装了三份、互相打架。系统里同时存在 conda 装的、pip 装的、软件中心装的版本脚本在新机器上跑出来的图跟本地不一样排查半天发现是加载了不同的 Python 环境。做结构可视化这件事第一步应该是把解释器、PyMOL 主程序和依赖库锁在同一个独立环境里之后所有脚本都以这个环境为准。2.1 用 conda 装 PyMOL 开源版的最小命令序列# 建一个专用环境避免和已有的 RDKit、OpenMM、numpy 版本互相污染 conda create -n pymol -c conda-forge pymol-open-source python3.11 -y conda activate pymol # 无界面自检能打印版本号说明主程序与依赖都正常 pymol -cq -d print(cmd.get_version())conda create里的-c conda-forge指定频道-n pymol是环境名-y跳过交互确认。后面的pymol -cq -d ...是排错利器-c表示不开图形界面-q表示安静模式不打印启动横幅-d后跟一条 PyMOL 命令并在执行后退出。这个组合在没有显示器的服务器上是标准用法出图脚本最终也是靠它跑。PyMOL 有开源版和 Schrödinger 维护的激励版两条线命令语法、选择表达式、脚本 API 基本一致.pml脚本可以互相搬。差别主要在光线追踪速度、部分内置工具和官方支持上。个人学习和常规出图开源版足够如果每天都在渲染大体系、或者要把出图流程嵌进商业项目再考虑激励版。安装途径典型命令适用场景注意点conda-forge 开源版conda create -n pymol -c conda-forge pymol-open-source个人、实验室、脚本化出图依赖干净版本可回退pip 安装pip install pymol-open-source已有 venv 的 Python 项目可能触发本地编译缺编译链会失败系统包管理器发行版自带包临时看一眼结构版本通常偏旧参数名可能对不上官方激励版安装包图形化安装高频渲染、需要支持授权与版本管理要和团队对齐2.2 首次启动就该改掉的 .pymolrc 参数PyMOL 启动时会自动读取用户主目录下的.pymolrc或.pymolrc.py。把常用设置写进去比每次开图手动敲一遍靠谱得多。习惯用 Python 写配置的话直接建.pymolrc.py# ~/.pymolrc.py PyMOL 启动时自动执行 from pymol import cmd cmd.set(bg_color, white) # 白底直接丢进 Word 或 PPT 不刺眼 cmd.set(ray_opaque_background, 0) # 光线追踪导出 PNG 时保留透明背景 cmd.set(ray_shadows, 0) # 关阴影小图不会发灰 cmd.set(antialias, 2) # 抗锯齿等级2 是速度和质量的平衡点 cmd.set(cartoon_fancy_helices, 1) # 螺旋画得更立体出版级图常用 cmd.set(auto_zoom, 0) # 加载结构后不自动缩放便于统一视角 cmd.set(valence, 1) # 显示芳香环内双键 cmd.set(mouse_selection_mode, 0) # 防止误点留下粉红色选择点每条cmd.set改的是一个全局参数。bg_color接受颜色名或 RGB 列表ray_opaque_background设成 0 时导出图背景透明方便后期在 Illustrator 里叠标注auto_zoom关掉后加载新对象不会把镜头拉跑做多张同视角对比图时这点很关键。改完必须重启 PyMOL 才生效。想确认配置到底有没有被读到启动后在命令行敲一句print(cmd.get(bg_color))返回white说明 rc 文件生效返回默认的黑色说明文件位置放错了——常见原因是把文件放进了项目目录而不是主目录。2.3 装完打不开三类报错的处理顺序第一类是图形库缺失Linux 上典型报错是ImportError: libGL.so.1: cannot open shared object file解决办法是补系统级 OpenGL 运行库而不是反复重装 PyMOL。服务器上没有图形环境时直接改用pymol -cq跑脚本不要试图强开窗口。第二类是环境冲突表现为窗口一闪而过、或者import numpy报二进制不兼容。用conda list | grep numpy看一眼是否混进了 pip 装的版本有的话先把 pip 版本卸干净再重装。判断依据是报错里出现mkl、openblas、ABI这类词。第三类是路径问题结构文件放在带空格或中文的目录里load会静默失败或提示找不到文件。稳妥做法是把工作目录切到纯英文路径脚本里用绝对路径引用结构文件。排查顺序建议固定为先确认命令能跑起来再确认文件能读到最后才怀疑参数。3. 选择语法与表征PyMOL 的主战场在命令行鼠标能干的活命令行都能干反过来不成立。PyMOL 的选择表达式selection algebra是整套工具里信息密度最高的部分它把「哪些原子」这件事形式化成可组合、可复用的字符串。掌握了它配体口袋、界面残基、柔性区这些概念就不需要靠肉眼一个个点而是写成一行条件随时能重新算一遍。3.1 加载 PDB 与对象管理的最小工作流pymol -cq EOF fetch 1ubq, async0 # 从 PDB 拉取结构async0 表示等下载完成再往下走 hide everything # 清掉默认的 lines 表征 show cartoon, 1ubq # 只显示卡通模型 color grey80, 1ubq orient # 调整视角让结构占满画布 png 1ubq_overview.png, 1200, 900, dpi150, ray1 EOFfetch后面跟 PDB 的 4 位编号async0在脚本里必须加否则下一步会在结构还没到的时候先执行。本地文件用load 4hhb.cif, hb第二个参数是对象名起个短名字后面写选择表达式会舒服很多。orient和zoom的区别在于前者会考虑结构的整体走向自动摆正后者只是把相机推近推远。一个容易忽略的点是生物组装体。PDB 文件里存的往往是不对称单元直接加载看到的「二聚体界面」很可能只是晶体学对称伙伴。要在加载前加一句set assembly, 1PyMOL 会按文件里的 BIOMOLECULE 记录生成真正的组装体。做界面分析前先确认这一点否则后面所有距离和面积都是错的。3.2 从 resi 到 byres within选择表达式的组合写法# 结合口袋配体 5 埃范围内、且属于聚合物链的残基按整残基保留 select pocket, byres (polymer within 5 of resn ATP) # 主链原子用于结构叠合 select bb, name CNCAO # 某个具体位点带侧链 select mut, chain A and resi 45 # 界面残基A 链上与 B 链相距 4 埃以内的残基 select iface, byres (chain A within 4 of chain B) # 高 B 因子区域通常对应柔性loop select flexible, polymer and b 60 # 排除水分子的聚合物 select apolymer, polymer and not resn HOH这段里的byres是关键within选出来的是原子byres把它扩展成完整的残基不然你会得到半个侧链。polymer、solvent、backbone、sidechain都是内置宏等价于写全not (resn HOHHOH...)之类的长表达式。b 60里的b指的是温度因子列读的是结构文件里那一列数字。选择表达式支持逻辑运算and、or、not也支持括号嵌套写复杂条件时要靠括号明确优先级。单个原子还能用斜杠表达式定位格式是/对象名//链/残基号/原子名例如/1a//A/45/CA。想验证一个选择集选到了什么用count_atoms pocket看原子数比盯着屏幕数快得多。关键词含义典型写法resi残基编号resi 45-60resn残基名称resn ATPname原子名name CAelem元素elem Znchain链标识chain ABwithin距离范围within 4 of resn ATPbyres扩展为整残基byres (chain A within 4 of chain B)neighbor共价相连neighbor name CAb温度因子b 60not取反polymer and not resn HOH3.3 cartoon、sticks、surface 的参数怎么配表征决定图能不能说明问题。同一套坐标换成 surface 之后结合口袋的形貌才看得出来换成 sticks 之后氢键和盐桥的位置才说得清。hide everything show cartoon, polymer set cartoon_transparency, 0.6, polymer # 卡通模型半透明露出内部配体 show sticks, byres (polymer within 4 of resn ATP) show spheres, resn ATP set sphere_scale, 0.3 # 球太大挡视线缩到 0.3 倍 show surface, polymer set surface_quality, 1 # 提升网格密度0 最快最粗糙 set transparency, 0.3 set solvent_radius, 1.4 # 探针半径常规 SASA 计算用 1.4 埃cartoon_transparency取值 0 到 1越大越透surface_quality从 0 往上调渲染时间几乎是线性增长做初稿时保持 0 或 1定稿再往上加。solvent_radius影响表面积计算结果跟文献对比数值时要用同一个探针半径这是很多人算出来对不上的原因。提示surface 和 cartoon 同时显示会严重拖慢旋转帧率。定视角的时候先hide surface确认好角度再打开。3.4 配色按链分色、彩虹渐变与只染碳原子util.cbc(1ubq, 1) # 按链分色同一个对象内各条链自动分配颜色 util.cbaw(1ubq) # 按元素分色碳灰、氮蓝、氧红 spectrum count, rainbow, polymer # 按残基序号做彩虹渐变看 N 端到 C 端的走向 color red, resi 45 and elem C # 只染碳原子杂原子保持原色 set_color myblue, [0.20, 0.40, 0.80] # 自定义颜色 color myblue, chain Autil.cbc和util.cbaw属于 PyMOL 内置的 Python 工具函数直接在命令行当命令用即可。做突出显示时会踩的一个坑color red, resi 45会把该残基的氮氧也一起染红结构信息就没了。稳妥写法是加and elem C只改碳骨架颜色杂原子保留元素配色。颜色名可以直接用grey80、palegreen、slate、tv_red这类内置色数值越大灰度越浅。自定义颜色用set_color加 0 到 1 之间的三个浮点数调完记得color一次才生效。4. 把教程汇编成脚本对齐、测量与批量出图一篇 PyMOL 使用教程里最容易被跳过的往往是「怎么一次做十张图」这一段。手工调十次视角配色和留白一定不一致审稿意见一来就要全部重做。真正省时间的做法是把对齐、测量、渲染写成脚本用pymol -cq script.py一条命令跑完改参数就是改一行。4.1 align、super、cealign 三种叠合方式的选择依据# 以 1b 为参考把 1a 叠上去只用 CA 原子cycles0 表示不做迭代优化 res cmd.align(1a and name CA, 1b and name CA, cycles0) print(align 返回:, res)不同版本align的返回值可能是列表也可能是浮点数写脚本前先print一次确认取 RMSD 时用res[0]或直接取res别凭记忆写。命令依据适用情况代价align序列对齐 结构叠合带离群点剔除同源蛋白、突变体与野生型序列差异大时可能对不齐super纯结构叠合不考虑序列序列相似度低但折叠相同容易把不相关的结构硬套上cealignCE 算法组合扩展低相似度、结构比对计算慢大体系要等transform0是个实用参数加上它只计算 RMSD 而不真的移动坐标适合做「两套坐标有多接近」的判断。叠合前记得把选择集限定在主链或 CA 上用全原子叠合会被侧链构象差异带偏RMSD 明显偏高。4.2 距离、角度、二面角的测量与标签排版# 测量并拿到数值cmd.distance 返回浮点距离 d cmd.distance(d1, /1a//A/45/CA, /1b//B/120/CA) # 角度与二面角 cmd.angle(a1, /1a//A/10/CA, /1a//A/11/CA, /1a//A/12/CA) cmd.dihedral(t1, /1a//A/10/CA, /1a//A/11/CA, /1a//A/12/CA, /1a//A/13/CA) # 虚线样式与标签 cmd.set(dash_width, 3) # 虚线粗细 cmd.set(dash_gap, 0.4) # 虚线间隔 cmd.set(label_size, 18) cmd.label(d1, %.2f A % d) print(距离 %.2f A % d)cmd.distance的第一个参数是测量对象的名称后面两个是原子定位串返回的距离数值可以直接格式化进标签避免事后手动敲数字敲错。angle需要三个原子dihedral需要四个顺序不同算出来的角不同写脚本时按「从参考原子出发」的固定顺序排。标签里建议先用A代替埃字号等确认导出没问题再换回带音标的写法——某些构建版配字体缺失时音标会渲染成方框出图前放大检查一遍比返工便宜。注意测量对象是独立于结构的对象删结构时不会自动消失delete d1要显式写。批量出图时忘了清上一张图的虚线会串到下一张。4.3 一次生成一组统一视角的图# batch_figures.py —— 用 pymol -cq batch_figures.py 运行 from pymol import cmd cmd.set(ray_shadows, 0) cmd.set(ray_opaque_background, 0) cmd.set(antialias, 2) targets {1ubq: A, 4hhb: A, 1crn: A} for pdb, chain in targets.items(): cmd.reinitialize() # 清空上一轮的对象、选择集和参数 cmd.fetch(pdb, async0) cmd.remove(solvent) # 去掉水减小渲染负担 cmd.hide(everything) cmd.show(cartoon, polymer) cmd.color(grey80, polymer) cmd.orient(chain %s % chain) cmd.zoom(chain %s % chain, 3) # 3 埃缓冲保证每张图留白一致 cmd.png(%s_cartoon.png % pdb, 1600, 1200, dpi300, ray1)循环里最关键的一句是reinitialize。它把对象、选择集、视角和临时参数全部复位这样每轮循环的起点完全相同出图才具备可比性。cmd.zoom(选择集, buffer)的第二个参数是向外扩展的空间距离固定成 3 埃之后不同大小的结构在画布里的留白比例一致拼版的时候不用再对齐。cmd.png的参数顺序是文件名、宽、高dpi只影响文件里记录的打印分辨率ray1才会触发光线追踪。像素尺寸决定细节量1600×1200 是投稿图的常用起点。4.4 光线追踪参数与渲染耗时的权衡光线追踪是出图阶段唯一真正慢的环节参数调错会出现「跑了一小时内存报错」。参数建议值作用与代价ray_shadows0关闭阴影小图更干净速度明显提升antialias2抗锯齿0 最快2 兼顾质量hash_max100–300大体系内存吃紧时调低能避免崩溃ray_trace_mode0 / 10 为常规渲染1 为卡通描边风格ray_trace_colorblack配合描边模式设定线条颜色surface_quality1表面积网格密度配合渲染时间同步调内存不够时优先降hash_max它控制渲染时哈希网格的精度从默认值往下调通常能救回一次崩溃如果只是嫌慢先关阴影再降抗锯齿最后才动分辨率。5. 出图之后会话复现、数值自检与返修时改什么图交出去不等于工作结束。三个月后审稿意见回来要求「把第 3 张图的视角再往右转 15 度配体换成 sticks」——如果当时只存了 PNG这一张图就得从头再做。可复现的工作流必须同时保存两样东西能立刻回到现场的快照和能被人读懂、进版本控制的脚本。5.1 .pse 快照与 .pml 脚本的双轨保存# 会话文件连同对象、选择集、视角、参数一起存下打开即回到现场 save scene_v3.pse # 脚本文件纯命令流体积小可以进 git别人能逐行读懂 save scene_v3.pml # 只导出当前视角矩阵方便在别的会话里精确复用同一个角度 get_view scene_v3_view.txt.pse的好处是完整缺点是体积大、跨版本偶尔读不回来.pml反过来它记录的是生成这张图的命令序列缺点是不含坐标数据本身需要配合原始 PDB。我的习惯是每次到关键节点就两个都存一遍.pse留给自己.pml交给合作者。get_view导出的是一串数字矩阵用set_view可以在完全不同的会话里精确复现同一个镜头写方法学部分或者做补充材料时特别有用。提示.pml脚本里避免出现绝对路径。结构文件用相对路径或fetch别人拿到脚本才能直接跑。5.2 用 get_area、get_distance 和 iterate 做数值自检视觉判断容易被视角骗数值不会。# 聚合物与复合物表面积差值近似为界面埋藏面积 sasa_poly cmd.get_area(polymer) sasa_all cmd.get_area(all) print(SASA polymer %.1f, all %.1f % (sasa_poly, sasa_all)) # 统计某个选择集的平均 B 因子iterate 里必须用 stored. 前缀写入外部变量 stored.bs [] cmd.iterate(polymer and name CA, stored.bs.append(b)) if len(stored.bs): print(mean B %.2f % (sum(stored.bs) / len(stored.bs)))get_area返回的是平方埃为单位的面积数值配合不同的选择集就能算出界面埋藏面积比目测「接触面大不大」靠谱。iterate里有一个必须记住的规则要写到命令外部可见的变量名字前面得加stored.直接写bs.append(b)变量会在表达式求值后消失。想统计的是特定状态而不是当前状态时把iterate换成iterate_state。5.3 返修阶段最常见的三个坑第一生物组装体没打开。审稿人说「你标的这个界面对不上」十有八九是当初加载的是不对称单元。加载前加set assembly, 1或者从 PDB 页面确认 BIOMOLECULE 记录再决定。第二选择集没有随对象更新。删掉或替换了结构对象之后旧选择集的原子范围会失效但名称还在后面count_atoms、get_area算出来的数全是错的。脚本里养成习惯操作完对象立刻delete掉相关选择集或者干脆用reinitialize从头来。第三加氢改变了距离。测氢键前用h_add补氢补完之后原本按重原子算的距离会变两个数值混在一张表里就会自相矛盾。要么全程只报重原子距离并注明要么补氢后重新跑一遍所有测量别把两种口径的数据拼在一起。最后一条经验把出图脚本和.pml一起放进项目仓库和图文件同级目录。半年后有人问「这张图参数是多少」答案就在旁边那个文件里不需要靠回忆重建现场的每一句命令。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →