You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MDAnalysis绘制带颜色梯度的Ramachandran概率密度图

如何使用MDAnalysis绘制带颜色梯度的Ramachandran概率密度图

我完全懂你的困扰——满屏同色同大小的点堆在一起,根本没法分辨哪些构象是模拟里更常出现的对吧?别担心,我们可以把原来的散点图改成密度热图,用颜色梯度来表示构象出现的频率,这样就能清晰看到高频区域啦!

第一步:提取Ramachandran数据

你已经用MDAnalysis生成了Ramachandran分析结果R,接下来我们需要把所有帧、所有残基的phi和psi角提取出来,整理成适合绘图的一维数组:

# 提取所有phi角(第一列)和psi角(第二列),展平多维数组
phi = R.results.angles[..., 0].flatten()
psi = R.results.angles[..., 1].flatten()

第二步:绘制密度热图(三种方案任选)

下面给你三种常用的密度绘图方式,你可以根据自己的需求选择:

方案1:直方图式密度图(hist2d)

用hist2d统计每个网格内的点数量,颜色深浅代表频率,适合需要精确数值统计的场景:

import matplotlib.pyplot as plt
import matplotlib.colors as colors

fig, ax = plt.subplots(figsize=plt.figaspect(1))

# 绘制2D直方图,用对数归一化让低频区域也清晰显示
hist = ax.hist2d(phi, psi, bins=100, cmap='viridis', norm=colors.LogNorm())
# 添加颜色条,标注频率
fig.colorbar(hist[3], ax=ax, label='出现频率')

# 设置坐标轴标签和范围(符合Ramachandran图标准)
ax.set_xlabel('Phi (°)')
ax.set_ylabel('Psi (°)')
ax.set_title('Ramachandran密度图(直方图式)')
ax.set_xlim(-180, 180)
ax.set_ylim(-180, 180)

plt.show()

方案2:六边形密度图(hexbin)

用六边形网格统计密度,视觉效果更柔和,比hist2d更美观:

import matplotlib.pyplot as plt
import matplotlib.colors as colors

fig, ax = plt.subplots(figsize=plt.figaspect(1))

# 绘制六边形密度图
hexbin = ax.hexbin(phi, psi, gridsize=100, cmap='viridis', norm=colors.LogNorm())
# 添加颜色条
fig.colorbar(hexbin, ax=ax, label='出现频率')

ax.set_xlabel('Phi (°)')
ax.set_ylabel('Psi (°)')
ax.set_title('Ramachandran密度图(六边形网格)')
ax.set_xlim(-180, 180)
ax.set_ylim(-180, 180)

plt.show()

方案3:核密度估计图(KDE)

用核密度算法平滑密度分布,适合需要展示构象分布趋势的场景,需要先安装seaborn库:

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=plt.figaspect(1))

# 绘制填充式KDE密度图,levels控制等高线数量
sns.kdeplot(x=phi, y=psi, fill=True, cmap='viridis', ax=ax, levels=10)
# 可选:叠加低透明度散点图,保留原始数据痕迹
# sns.scatterplot(x=phi, y=psi, color='white', marker='.', alpha=0.1, ax=ax)

ax.set_xlabel('Phi (°)')
ax.set_ylabel('Psi (°)')
ax.set_title('Ramachandran密度图(KDE平滑)')
ax.set_xlim(-180, 180)
ax.set_ylim(-180, 180)

plt.show()

小提示

  • 颜色映射(cmap)可以换成你喜欢的,比如plasma、inferno、magma都是不错的选择;
  • LogNorm对数归一化能避免高频区域颜色过亮,让低频区域的细节也能展现出来,如果不需要可以去掉;
  • 调整bins(hist2d)或gridsize(hexbin)的数值,可以控制密度图的精细程度。

备注:内容来源于stack exchange,提问作者Fernando Oliveir Tytor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:58:02