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

如何在Seaborn lineplot中为同一条线的不同数值区间设色?

实现Seaborn Lineplot按数值区间为线条分段设色

要让同一条折线根据Z-Score CEI的数值区间显示不同颜色,Seaborn默认的lineplot没法直接实现,得先对数据做预处理,把连续处于同一区间的线段拆成独立分组,再分别绘制。

具体步骤和代码示例

  1. 标记数据点的区间分组
    给每个数据点打标签,区分它属于“正常区间(-1到1)”还是“异常区间(<-1或>1)”。
  2. 生成连续同区间的线段分组
    直接按区间标签绘图会导致同区间但不连续的点被错误连接,所以要给连续的同区间点分配同一个分组ID,确保每段连续的同色线段是独立的绘图单元。
  3. 分段绘制折线
    遍历每个分组,根据区间设置对应颜色,用lineplot分别绘制每段线段。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 构造示例数据(替换成你的真实数据即可)
np.random.seed(42)
stages = range(1, 21)
z_score = np.random.normal(0, 1.2, size=20)
df = pd.DataFrame({'Stage': stages, 'Z-Score CEI': z_score})

# 标记每个数据点的区间分组
df['color_group'] = pd.cut(
    df['Z-Score CEI'],
    bins=[-np.inf, -1, 1, np.inf],
    labels=['outlier', 'normal', 'outlier']
)

# 生成连续同区间的线段分组ID
df['group_id'] = (df['color_group'] != df['color_group'].shift()).cumsum()

# 设置绘图风格
sns.set_style("whitegrid")
plt.figure(figsize=(10, 6))

# 遍历每个分组绘制线段
for group_id, segment_data in df.groupby('group_id'):
    # 根据分组设置颜色
    line_color = 'green' if segment_data['color_group'].iloc[0] == 'normal' else 'red'
    # 绘制当前线段,添加标记点增强可读性
    sns.lineplot(
        data=segment_data,
        x='Stage',
        y='Z-Score CEI',
        color=line_color,
        linewidth=2,
        marker='o'
    )

# 添加区间参考线,方便查看阈值
plt.axhline(y=1, color='gray', linestyle='--', alpha=0.7)
plt.axhline(y=-1, color='gray', linestyle='--', alpha=0.7)

# 设置图表标签和标题
plt.title('Z-Score CEI 随 Stage 变化(按数值区间着色)', fontsize=14)
plt.xlabel('Stage', fontsize=12)
plt.ylabel('Z-Score CEI', fontsize=12)

plt.show()

效果说明

  • 处于-1到1之间的线段显示为绿色,超出该范围的线段显示为红色
  • 灰色虚线是阈值参考线,帮助快速区分区间
  • 标记点可以让你更清晰地看到每个Stage对应的数值位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:06:15