3行代码完成蛋白质结构可视化:AlphaFold 实战指南
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
你拿到一条新蛋白序列,当晚组会上就要展示它的三维构象——与其熬夜手动建模,不如直接把 AlphaFold 预测出的 PDB(Protein Data Bank,一种记录原子坐标的通用格式)丢进浏览器里渲染出来。这套官方仓库(Open source code for AlphaFold 2)自带的可视化流程,核心就依赖py3Dmol和仓库里的 alphafold/notebooks/notebook_utils.py,几行代码就能得到可以旋转、缩放、着色的交互式结构图。
它解决了什么问题
AlphaFold 预测出来的结构本质是一组原子坐标,直接看 PDB 文本没有意义。这个仓库把"预测结果 → 可交互 3D 模型"这条链路做成了标准工具:protein.from_prediction()负责把张量结果转成结构对象,protein.to_pdb()转成标准格式,最后交给py3Dmol做 Web 端渲染。适用人群是结构生物学家、药化方向的研究者,以及任何需要快速向非专业听众解释"这个蛋白长什么样"的人。
准备与依赖
- 环境:Python 3.9+;Jupyter Notebook 或 JupyterLab(3Dmol 是前端控件,需要 Web 环境)。
- 关键依赖:
py3Dmol(3D 渲染)、numpy、matplotlib(保守性绘图)、jax+tensorflow-cpu(仅跑预测时需要,纯可视化可以省掉)。 - 仓库与依赖安装:
git clone https://gitcode.com/GitHub_Trending/al/alphafold pip install py3Dmol -r requirements.txt如果你已有现成的 PDB 文件(哪怕是 AlphaFold 预测库下载来的成品),可以跳过预测环节,直接进入下面的场景。
实战:按场景拆解
场景一:拿到 PDB 快速出图
最短闭环:读入 PDB 字符串,一行setStyle出卡通带状图。执行后你得到一个 800×600 的交互窗口,拖拽即可旋转。
import py3Dmol view = py3Dmol.view(width=800, height=600) view.addModel(pdb_str, 'pdb') view.setStyle({'cartoon': {'color': 'spectrum'}}, {'stick': {}}) view.zoomTo() view.show()场景二:按 pLDDT 置信度着色
pLDDT(per-residue predicted LDDT,每个残基的局部置信度分数,50 以下基本不可信)是判断"哪些区域敢信"的关键。官方 notebook 的做法是先把 pLDDT 写进 PDB 的 B-factor 列,再让 3Dmol 按 B 值分色。
PLDDT_BANDS = [(0, 50, '#FF7D45'), (50, 70, '#FFDB13'), (70, 90, '#65CBF3'), (90, 100, '#0053D6')] to_visualize_pdb = utils.overwrite_b_factors(relaxed_pdb, banded_b_factors) view.addModel(to_visualize_pdb, 'pdb') style = {'cartoon': {'colorscheme': {'prop': 'b', 'map': {i: b[2] for i, b in enumerate(PLDDT_BANDS)}}}} view.setStyle({'model': -1}, style) view.show()渲染出来是官方统一的四段配色:深蓝 >90、浅蓝 70-90、黄 50-70、橙 <50,一眼定位不可靠区段。
技术细节:
overwrite_b_factors()位于 alphafold/relax/utils.py,内部用 Biopython 解析 PDB、逐残基覆写 B 值后重新序列化返回新字符串,因此不改动原始文件。
如果你还想评估输入序列的搜索质量,可以顺手画一张 MSA(Multiple Sequence Alignment,多序列比对)保守性图:notebook_utils.show_msa_info(single_chain_msas=msas, sequence_index=1)会用 matplotlib 输出每个位置非间隙氨基酸计数,曲线整体偏高的位置预测更稳。
场景三:高亮关键区域并聚焦
讲结合位点或突变位时,把目标残基从卡通带里"提"出来:
view.addStyle({'resi': (10, 20)}, {'stick': {'color': 'red', 'radius': 0.3}}) view.zoomTo({'resi': (10, 20)}) view.show()第 10-20 号残基会变成红色棍状模型,视角自动对准该区域,演示时不用手动找位置。
场景四:多结构帧切换对比
对比野生型与突变体,或查看不同模型(model_1/model_2/relaxed)时,把多个 PDB 按帧加入同一个视图:
view.addModelsAsFrames([pdb_wt, pdb_mut, pdb_relaxed]) view.setStyle({'model': -1}, {'cartoon': {'color': 'chain'}}) view.show()面板下方会出现帧切换控件,左右箭头即可在三个结构间切换;多链复合物用colorscheme: 'chain'可以按链自动分色。
关键参数速查
| 参数 | 作用 | 推荐值 |
|---|---|---|
width/height | 交互窗口尺寸 | 800 / 600 |
cartoon.color | 卡通带配色 | spectrum(彩虹)或chain(按链) |
colorscheme.prop | 按哪个数据分色 | 'b'(读取 B-factor,即 pLDDT) |
colorscheme.map | B 值→颜色映射 | 官方四段PLDDT_BANDS |
stick.radius | 侧链/高亮残基的棍粗细 | 0.2 - 0.5 |
VDW.opacity | 范德华表面透明度(addSurface) | 0.2 - 0.4,别高于 0.5 否则挡住骨架 |
zoomTo选择器 | 视角对准指定区域 | {'resi': (起, 止)} |
常见问题
view.show()没有画面?3Dmol 控件只能在 Jupyter/Colab 等支持前端输出的环境渲染;在纯 Python 脚本里要改用view.saveStates()或导出 HTML(见下节),或确认浏览器已允许该页面的 WebGL。- pLDDT 着色全是同一个颜色?检查 PDB 的 B 列是否真的写入了 pLDDT。很多现成 PDB 的 B 值是占位 0,需要先走
overwrite_b_factors再渲染。 - 内存占用高?预测阶段(jax/tensorflow 加载参数)是内存大头,可视化阶段只吃 PDB 文本,几乎无开销。如果只是看结果,不必装模型依赖。
进阶与延伸
导出与分发有两种方式:静态图用view.png();要保留交互就把view._make_html()写入.html文件,浏览器直接打开即可,适合贴进报告或发给同事。完整流程示例(序列校验 → MSA 合并 → 跑模型 → AMBER 弛豫 → 着色展示)见仓库自带的 notebooks/AlphaFold.ipynb,各模型档位与置信度指标的定义见 docs/technical_note_v2.3.0.md。
官方资源:批量预测脚本入口为 run_alphafold.py,容器化运行见 docker/ 目录。
下一步
先跑通场景一,确认本地 PDB 能出交互图,再按"着色 → 高亮 → 帧对比"逐级叠加。建议第一周就用官方四段 pLDDT 配色习惯化,汇报时读者不需要重新学习颜色含义。
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考