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

如何在Matplotlib中实现平滑演化分位数图的阴影填充?

用Matplotlib实现分位数曲线的阴影填充效果

你已经通过traj函数生成了误差轨迹,并计算出7个分位数的对数曲线。要实现分位数之间的阴影填充,只需借助Matplotlib的fill_between函数即可完成,以下是修改后的完整代码:

import numpy as np
import matplotlib.pyplot as plt

def traj(p, d, B, alpha, num_steps):
    """Returns num_steps x B array of squared errors"""
    h = np.arange(1, d + 1) ** -p
    hsqrt = np.sqrt(h)
    E = np.ones((B, d))
    traj = np.zeros((num_steps, B, d))

    for step_idx in range(num_steps):
        X = hsqrt * np.random.randn(B, d)
        losses = np.einsum("BD,BD->B", E, X)
        E -= alpha * np.einsum("BD,B->BD", X, losses)
        traj[step_idx] = E

    return np.sum(traj * traj, axis=2)

a = 2.421249521036836042
 
numQuantiles=7
errors = traj(p=0, d=1, B=3000, alpha=a, num_steps=100)
quantiles=np.zeros((numQuantiles, errors.shape[0]))
for q in range(numQuantiles):
    quantiles[q] = np.quantile(errors, (q+1)/(numQuantiles+1), axis=1)

quantiles = np.log(quantiles)

x = np.arange(1, 101)
mid_idx = numQuantiles // 2

# 绘制中间中位数曲线
plt.plot(x, quantiles[mid_idx], marker='o', label='Median')

# 从内到外填充分位数区间,用透明度区分层次
plt.fill_between(x, quantiles[mid_idx-1], quantiles[mid_idx+1], color='blue', alpha=0.3)
plt.fill_between(x, quantiles[mid_idx-2], quantiles[mid_idx+2], color='blue', alpha=0.2)
plt.fill_between(x, quantiles[0], quantiles[-1], color='blue', alpha=0.1)

# 绘制其余分位数曲线
plt.plot(x, quantiles[mid_idx+1], marker='o')
plt.plot(x, quantiles[mid_idx+2], marker='o')
plt.plot(x, quantiles[mid_idx-1], marker='o')
plt.plot(x, quantiles[mid_idx-2], marker='o')

plt.xlabel('Step')
plt.ylabel('Log Squared Error')
plt.legend()
plt.show()

关键说明

  • fill_between(x, y1, y2)负责填充两条曲线间的区域,alpha参数控制透明度,从内到外降低透明度能让区间层次更清晰。
  • 先绘制中间的中位数曲线,再依次填充相邻分位数、外层分位数的区域,最后绘制其余分位数曲线,确保曲线显示在阴影上方。
  • 若需要区分不同区间的视觉效果,可修改color参数使用不同深浅的颜色。

内容的提问来源于stack exchange,提问作者Yaroslav Bulatov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:45:04