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

如何用Python为多序列比对的香农熵值列表绘制平滑曲线

多序列比对香农熵平滑曲线实现方案

你需要的插值方法为PCHIP(分段三次Hermite插值多项式),该方法完全匹配你的两个要求:

  • 插值曲线严格经过所有原始计算得到的熵值顶点
  • 原始值为0的位置插值结果也为0,不会出现普通三次样条的过冲问题,也不会产生不符合物理意义的负熵值

代码修改说明

你无需修改熵计算部分的代码,仅需要替换绘图部分的逻辑即可,修改后的完整绘图代码如下:

from scipy.interpolate import PchipInterpolator

# 原始数据准备
x = np.arange(len(clustal_omega1))  # 原始残基位置x坐标
y = np.array(clustal_omega1)  # 原始熵值y坐标

# 生成高密度插值x坐标,数值越高曲线平滑度越高
x_smooth = np.linspace(x.min(), x.max(), 300)
# 执行PCHIP插值
pchip = PchipInterpolator(x, y)
y_smooth = pchip(x_smooth)

# 绘制平滑曲线
plt.figure(figsize=(18,10))
plt.plot(x_smooth, y_smooth, 'r', linewidth=2)
# 可选:保留原始数据点做校验,取消下方注释即可
# plt.scatter(x, y, c='r', s=10)
plt.xlabel('Residue', fontsize=16)
plt.ylabel("Shannon's entropy", fontsize=16)
plt.ylim(bottom=0)  # 额外固定y轴最小值为0,避免显示异常
plt.show()

方案优势说明

普通三次样条插值(比如你导入的make_interp_spline默认实现)为了保证曲线二阶可导、整体光滑,会在数据突变或者连续平坦区域(比如熵值恒为0的保守序列区)出现过冲,生成不符合实际意义的负熵值。PCHIP插值专门针对这类场景优化,保证插值结果始终符合原始数据的单调性,不会出现过冲问题。

内容的提问来源于stack exchange,提问作者satyam sangeet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:12:01