在 Biopython 中提取蛋白质结构的二面角并将其绘制成 Ramachandran 图,同时根据 PDB 文件中二级结构的注释为不同的二级结构类型(如 α-螺旋、β-折叠、转角等)着色,涉及两个步骤:
- 提取二面角(φ 和 ψ):使用 Biopython 的
CaPPBuilder
提取二面角。 - 从 PDB 文件读取二级结构注释:如果 PDB 文件中包含
HELIX
、SHEET
等注释,使用这些信息将残基归类为不同的二级结构类型。 - 绘制 Ramachandran 图:为不同的二级结构用不同颜色绘制图表。
示例代码:
import os
import matplotlib.pyplot as plt
from Bio.PDB import PDBParser, is_aa, CaPPBuilder
import math
def classify_secondary_structure(phi, psi):
"""
根据 phi 和 psi 角度分类二级结构
"""
# α-螺旋: phi ~ -60, psi ~ -45
if -100 <= phi <= -30 and -70 <= psi <= -10:
return 'alpha_helix'
# β-折叠: phi ~ -120, psi ~ 120
elif -180 <= phi <= -30 and 90 <= psi <= 180:
return 'beta_sheet'
# 其他: coil
else:
return 'coil'
def extract_phi_psi_with_ss(pdb_file):
"""
从 PDB 文件中提取二面角(phi 和 psi),并根据二面角分类二级结构
"""
parser = PDBParser()
structure = parser.get_structure('protein', pdb_file)
phi_psi_ss = [] # 存储二面角及其二级结构类型
for model in structure:
for chain in model:
# 使用 CaPPBuilder 构建 C-alpha 骨架
ppb = CaPPBuilder()
for poly in ppb.build_peptides(chain):
phi_psi = poly.get_phi_psi_list()
for angles in