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

如何基于斜率为单条折线图分色?现有代码生成两条线求解决

问题解决:按斜率变色的连续折线图

原代码的问题在于将正负斜率的点分组后单独连线,导致连续折线被拆分为多个断开的片段。正确的思路是逐段绘制相邻数据点之间的线段,根据每一段的斜率决定颜色,这样就能保证折线的连续性。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 匹配需求:x取值为0到200,共201个点
N = 201
x = np.arange(N)
# 按需求使用np.random.randn()生成正态分布噪声ε
epsilon = np.random.randn(N)
y = x * (1 + 0.25 * epsilon)

plt.figure(figsize=(10, 4))

# 遍历每一段相邻点组成的线段
for i in range(len(x) - 1):
    # 计算当前线段的斜率(x步长为1,直接取y的差值即可)
    segment_slope = y[i+1] - y[i]
    # 根据斜率设置颜色:正斜率蓝色,负斜率红色
    line_color = 'blue' if segment_slope > 0 else 'red'
    # 绘制单条线段
    plt.plot([x[i], x[i+1]], [y[i], y[i+1]], color=line_color)

# 手动创建图例(逐段绘制无法直接通过label批量生成)
from matplotlib.lines import Line2D
legend_elements = [
    Line2D([0], [0], color='blue', lw=2, label='正斜率线段'),
    Line2D([0], [0], color='red', lw=2, label='负斜率线段')
]
plt.legend(handles=legend_elements)

plt.xlabel('x')
plt.ylabel('y')
plt.title('按斜率变色的连续折线图')
plt.grid(True)
plt.show()

关键修改说明

  • 修正噪声生成:替换np.random.rand()为np.random.randn(),符合需求中ε的生成要求
  • 调整x范围:设置N=201,让x覆盖0到200的所有整数
  • 核心逻辑优化:从分组点连线改为逐段绘制线段,确保折线连续,每一段根据自身斜率设置颜色
  • 图例处理:由于是逐段绘制,通过手动创建Line2D元素来添加图例

内容的提问来源于stack exchange,提问作者imtiaz ul Hassan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:32