3行代码上手AlphaFold蛋白质3D可视化:从序列到可发表图片
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
组会前夜,你手里只有一条氨基酸序列,而导师要看的是一张能旋转、能缩放、按置信度着色的3D构象图。AlphaFold 开源仓库把这条链路拆成了几个现成函数:序列校验在alphafold/notebooks/notebook_utils.py,结构对象与 PDB 转换在alphafold/common/protein.py,最后的蛋白质结构交互查看交给 py3Dmol。本文按"跑通→自定义→导出→避坑"的顺序,带你走完这条 AlphaFold 可视化流程。
🚀 快速上手:环境与最小示例
完整预测需要模型参数和数据库,但"从 PDB 到 3D 视图"这一段在任意装了py3Dmol的 Python 环境里就能跑。如果你要从零复现整个流程,先拉取仓库:
git clone https://gitcode.com/GitHub_Trending/al/alphafold下面这段是最小可运行的蛋白质结构交互查看代码:读入一段 PDB,塞进 py3Dmol 视图,加个卡通着色就出图。
import py3Dmol from alphafold.common import protein # 从 PDB 字符串还原 Protein 对象 pdb_str = open("alphafold/common/testdata/5nmu.pdb").read() prot = protein.Protein.from_pdb_string(pdb_str) pdb_out = protein.to_pdb(prot) # 创建 800x600 的交互视图并渲染 view = py3Dmol.view(width=800, height=600) view.addModel(pdb_out, "pdb") view.setStyle({"cartoon": {"color": "spectrum"}}) # 沿链彩虹着色 view.zoomTo() view.show()运行后你会得到一个可拖拽旋转的模型。想理解每一步背后的细节,可以继续往下看。
📦 关键模块速览
在动手之前,先搞清楚每个函数"什么时候用"。核心工具都集中在两处:
| 函数 / 模块 | 位置 | 什么时候用它 |
|---|---|---|
clean_and_validate_single_sequence | alphafold/notebooks/notebook_utils.py | 喂给模型前清洗序列:去空白、转大写、校验长度与氨基酸合法性 |
show_msa_info | alphafold/notebooks/notebook_utils.py | 画出各残基位置的非间隙氨基酸计数,快速判断 MSA 信息量 |
Protein.from_prediction | alphafold/common/protein.py | 把预测输出ModelOutput转成带坐标的Protein对象 |
protein.to_pdb | alphafold/common/protein.py | 序列化回 PDB 文本,作为 py3Dmol 的输入 |
py3Dmol.view | 第三方库 | 创建可交互 3D 视图,负责所有渲染与样式 |
提示:
show_msa_info(single_chain_msas, sequence_index)内部用 numpy 把 MSA 转成矩阵,再用 matplotlib 画出一条"每个位置有多少条序列非间隙"的曲线,源码见 alphafold/notebooks/notebook_utils.py。
🔬 从零跑通:预测结果变 3D 模型
完整流程分三步:先备好序列,拿到features和预测结果prediction,再转成 3D。
校验序列——AlphaFold 只接受 20 种标准氨基酸,且长度需落在min_length与max_length之间,否则会抛ValueError:
from alphafold.notebooks import notebook_utils clean_sequence = notebook_utils.clean_and_validate_single_sequence( input_sequence="MSTEEPQDPSVTVWKRRRPPA...你的序列", min_length=16, max_length=2500 )从预测结果构建 Protein——from_prediction接收特征字典features与模型输出prediction,第二个参数b_factors可以顺手传入逐残基 pLDDT,后面着色会用到:
from alphafold.common import protein b_factors = prediction["plddt"][:, None] # 逐残基 pLDDT 写入 B 因子 prot = protein.from_prediction(features, prediction, b_factors=b_factors) pdb_str = protein.to_pdb(prot)提示:跑完整预测需要 Haiku/One 等模型参数与 JackHMMER、HHblits 等数据库工具链,仓库 scripts/ 下提供了一组数据下载脚本,官方示例在 notebooks/AlphaFold.ipynb 里可以直接按单元格顺序执行。
交给 py3Dmol 渲染——addModel负责解析 PDB,setStyle决定渲染风格,zoomTo让分子自动居中:
view = py3Dmol.view(width=800, height=600) view.addModel(pdb_str, "pdb") view.setStyle({"cartoon": {"color": "spectrum"}}) view.zoomTo() view.show()🎨 进阶:让结构图"说话"
默认彩虹卡通已经够用,但发论文时你通常想表达更多信息。
按 pLDDT 给结构着色
pLDDT 是逐残基的置信度指标(0~100)。因为前面已把它写进 B 因子,py3Dmol 可以直接按b属性取色:
# 按 B 因子(pLDDT)做连续渐变着色 view.setStyle({ "cartoon": {"colorscheme": {"prop": "b", "gradient": "roygb", "min": 50, "max": 90}} })提示:仓库自带的 notebook 用的也是同一套路——
{'cartoon': {'colorscheme': {'prop': 'b', 'map': color_map}}},见 notebooks/AlphaFold.ipynb。官方把 pLDDT 分成四档:≥90 为 High,70~90 为 Medium,50~70 为 Low,<50 为 Disordered,判定逻辑在 alphafold/common/confidence.py 的_confidence_category中。
高亮活性位点并加标签
想突出某段残基,就用addStyle指定选择器,再叠一层addLabel:
view.addStyle({"resi": range(10, 20)}, {"stick": {"color": "red", "radius": 0.3}}) view.addLabel("Active Site", {"fontSize": 12, "fontColor": "black"}, {"resi": 15})多结构并排对比
比较野生型与突变体时,用grid参数一次开四个子视图,对每个(行, 列)位置分别建模:
view = py3Dmol.view(width=800, height=800, grid=(2, 2)) view.addModel(pdb_wt, "pdb", viewer=(0, 0)) view.setStyle({"cartoon": {"color": "blue"}}, viewer=(0, 0)) view.addModel(pdb_mut, "pdb", viewer=(0, 1)) view.setStyle({"cartoon": {"color": "red"}}, viewer=(0, 1)) view.show()📤 导出与分享:格式怎么选
| 目标 | 做法 | 适用场景 |
|---|---|---|
| 静态高清图 | view.png()截图 | 直接贴进幻灯片 |
| 可交互 HTML | 写出view._make_html()的返回值 | 网页嵌入、发给合作者在线旋转 |
| 论文级图片 | 固定视角后用 matplotlibsavefig重绘 | 期刊投稿,可精确控制分辨率 |
HTML 导出的完整写法:
with open("protein_visualization.html", "w") as f: f.write(view._make_html())提示:投稿用的图建议统一配色与背景,导出前先
view.setBackgroundColor("white"),并固定相机角度,避免审稿人截图后角度不一致。
⚠️ 避坑与解读要点
ValueError: non-amino acid letters:序列里混入了小写字母、空格或未知字符(如X)。先在clean_and_validate_single_sequence里过滤,长度低于 16 或超过 2500 也会在这一步被拦下。show_msa_info画不出来:该函数用 matplotlib 绘图,需要交互环境(Jupyter/Colab)才能显示;纯脚本里会只打印序列数量,不出图。- pLDDT 不是结构对错证明:pLDDT > 90 的区域结构更可靠;pLDDT < 50 的低置信度区段(多对应无序区),图中看起来"软塌塌"的部分不要过度解读,必要时用实验手段交叉验证。
- 着色范围要手动截断:
gradient的min/max若照抄 0~100,多数残基会挤在一端颜色里,按你数据的实际分布(比如 50~90)截断对比度更好。
写在最后
AlphaFold 可视化本质上是一条"数据清洗 → 结构对象 → 渲染引擎"的流水线:notebook_utils管输入质量,protein.py管结构表示,py3Dmol 管怎么呈现。把这条流水线跑熟之后,从一条序列到一张可发表的结构图,中间不再需要任何手工建模。
- 校验序列是第一步,
min_length=16, max_length=2500是仓库内置的硬性边界。 - 把 pLDDT 写入 B 因子,再用
colorscheme: {"prop": "b"}着色,是置信度可视化最省事的路径。 - 高置信区(≥90)可放心解读,低置信区(<50)保持怀疑并留待实验验证。
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考