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

如何基于条件为Matplotlib/Seaborn折线图叠加不同阴影区域

你可以搭配Matplotlib的axvspan方法完成需求,核心逻辑是先拆分出不同type对应的x轴区间,再给每个区间叠加半透明填充阴影,完整实现代码如下:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
np.random.seed(0)
rng = np.random.default_rng(2)
mlist=[]
for _ in range(4):
    m=np.random.rand(4).tolist()
    n=rng.integers(0, 6, size=(1)).tolist()*4
    df = pd.DataFrame(zip(m,n), columns=['yval','type'])
    mlist.append(df)

df=pd.concat(mlist).reset_index(drop=True).reset_index()

# 绘图部分
fig, ax = plt.subplots(figsize=(10,6))
# 绘制基础折线
sns.lineplot(data=df, x="index", y="yval", ax=ax, color='black', linewidth=2)

# 自定义不同type对应的填充颜色,可自行调整
type_color_map = {
    0: '#f8766d',
    1: '#7cae00',
    2: '#00bfc4',
    3: '#c77cff',
    4: '#ffa500',
    5: '#ff69b4'
}

# 提取连续相同type的区间
df['type_group'] = df['type'].diff().ne(0).cumsum()
for _, group in df.groupby('type_group'):
    current_type = group['type'].iloc[0]
    x_left = group['index'].min()
    x_right = group['index'].max()
    # 添加阴影区域,alpha控制透明度
    ax.axvspan(xmin=x_left, xmax=x_right, color=type_color_map[current_type], alpha=0.3, label=f'type={current_type}')

plt.legend()
plt.show()

补充说明:

  • 你可以修改type_color_map中的色值,匹配你需要的阴影样式
  • 透明度参数alpha推荐取值范围0.2~0.4,既可以清晰区分区间,也不会遮挡上方的折线
  • 如果需要绘制沿y轴变化的不规则阴影,可替换使用Matplotlib的fill_between方法,设置对应y轴上下边界参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:15:03