在分子动力学(MD)模拟中,蛋白质和配体的相互作用信息至关重要,它能帮助我们理解分子识别的关键细节,进而为药物设计提供指导。今天,我将分享一个简单的Python脚本,通过分析Desmond产生的MD数据,生成蛋白质-配体相互作用频率的堆叠柱状图。
上期推文分子动力学模拟数据预处理:如何对蛋白质-配体相互作用频率进行排序和归一化 中我们对分子动力学模拟的数据进行了整理,本例内容就以上期获得的数据为例,绘制蛋白质-配体相互作用频率的堆叠柱状图,仿照Desmond报告的样式。
核心步骤
1. 数据准备:读取并处理Desmond输出文件
首先,我们需要从Desmond模拟的输出文件中提取交互频率数据。通过Python的pandas
库,我们可以方便地从Excel文件中读取这些数据。Excel文件包含了不同氨基酸与配体的交互频率及交互类型,如氢键、疏水相互作用等。
import pandas as pd
# 读取Excel文件
file_path = 'Contacts.xlsx'
sheet_name_sorted = 'Interaction_Frequency_Sorted'
df = pd.read_excel(file_path, sheet_name=sheet_name_sorted)
# 获取氨基酸和相互作用类型
amino_acids = df['Amino_Acid'].unique()
interactions = df['Interaction'].unique()
2. 数据框处理:构建相互作用矩阵
接下来,我们构建一个矩阵,行表示不同的氨基酸,列表示不同的交互类型,单元格的值代表该氨基酸和特定相互作用类型的频率。这一步将帮助我们为后续的可视化准备数据。
# 创建一个空的数据框来保存每个氨基酸和相互作用类型的频率
interaction_counts = pd.DataFrame(index=amino_acids, columns=interactions).fillna(0)
# 填充数据框
for _, row in df.iterrows():
interaction_counts.loc[row['Amino_Acid'], row['Interaction']] = row['Frequency (scaled)']
3. 可视化:堆叠柱状图的绘制
在处理完数据后,我们使用matplotlib
库绘制堆叠柱状图。每种相互作用类型都有不同的颜色,堆叠在一起,便于直观比较每种氨基酸的交互模式。使用自定义颜色和格式化标签,可以让图表看起来更加清晰美观。
import matplotlib.pyplot as plt
import numpy as np
# 设置自定义颜色
custom_colors = ['#4DB6AC', '#FF8A65', '#FFD54F', '#81C784', '#BA68C8', '#FFB74D']
# 绘制堆叠柱状图
plt.figure(figsize=(10, 5))
bar_positions = np.arange(len(amino_acids))
bottom = np.zeros(len(amino_acids))
max_y = 0
for i, interaction in enumerate(interactions):
if interaction_counts[interaction].sum() > 0:
plt.bar(bar_positions, interaction_counts[interaction], label=interaction, bottom=bottom, color=custom_colors[i % len(custom_colors)])
bottom += interaction_counts[interaction]
max_y = max(max_y, bottom.max())
plt.ylim(0, max_y * 1.1)
plt.ylabel('Interactions Fraction', fontsize=12, labelpad=5, fontweight='bold')
plt.xticks(bar_positions, amino_acids, fontsize=9, rotation=45, ha='right')
# 显示图例
plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15), ncol=len(interactions), frameon=False)
plt.tight_layout()
# 保存图像
plt.savefig('Protein-ligand_interactions.png', dpi=600)
plt.show()
完整代码
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
# 设置全局字体为Arial
mpl.rcParams['font.family'] = 'Arial'
mpl.rcParams['font.weight'] = 'bold'
# 读取Excel文件
file_path = 'Contacts.xlsx'
sheet_name_sorted = 'Interaction_Frequency_Sorted'
df = pd.read_excel(file_path, sheet_name=sheet_name_sorted)
# 获取氨基酸和相互作用类型
amino_acids = df['Amino_Acid'].unique()
interactions = df['Interaction'].unique()
# 创建一个空的数据框来保存每个氨基酸和相互作用类型的频率
interaction_counts = pd.DataFrame(index=amino_acids, columns=interactions).fillna(0)
# 填充数据框
for _, row in df.iterrows():
interaction_counts.loc[row['Amino_Acid'], row['Interaction']] = row['Frequency (scaled)']
# 设置自定义颜色
custom_colors = ['#4DB6AC', '#FF8A65', '#FFD54F', '#81C784', '#BA68C8', '#FFB74D']
# 绘制堆叠柱状图
plt.figure(figsize=(10, 5))
bar_positions = np.arange(len(amino_acids))
bottom = np.zeros(len(amino_acids))
max_y = 0
for i, interaction in enumerate(interactions):
if interaction_counts[interaction].sum() > 0:
plt.bar(bar_positions, interaction_counts[interaction], label=interaction, bottom=bottom, color=custom_colors[i % len(custom_colors)])
bottom += interaction_counts[interaction]
max_y = max(max_y, bottom.max())
plt.ylim(0, max_y * 1.1)
plt.ylabel('Interactions Fraction', fontsize=12, labelpad=5, fontweight='bold')
plt.xticks(bar_positions, amino_acids, fontsize=9, rotation=45, ha='right')
# 显示图例
plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15), ncol=len(interactions), frameon=False)
plt.tight_layout()
# 保存图像
plt.savefig('Protein-ligand_interactions.png', dpi=600)
plt.show()
运行这段代码后,我们将获得一个清晰的堆叠柱状图,展示不同氨基酸在分子动力学模拟中的相互作用频率。这种可视化方式非常有助于分析蛋白质-配体的关键接触位点及其相互作用模式,为后续的实验设计和优化提供了有力支持。
总结
通过Python对Desmond分子动力学模拟数据的处理和可视化,我们能够更好地理解蛋白质-配体的相互作用。这内容详细介绍了Python数据处理和绘图的方法快速生成高质量的交互频率图表,有助于提高数据的解读效率。
如果觉得内容有用,记得分享给有需要的小伙伴哦!😊
▼