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

绘制指定阶梯图并提取连续红线数值技术求助

阶梯图绘制与数值提取方案

问题说明

给定离散x、y数据:

y=[14.0,11.0,14.0,31.0]
x=[3.45,3.88,3.99,4.33]

需绘制指定样式的阶梯图,并提取图中红色连续线的数值。现有代码(修改了y的最后一个值且未指定阶梯模式)未得到预期结果:

import numpy as np
import matplotlib.pyplot as plt

y=[14.0,11.0,14.0,0.0]
x=[3.45,3.88,3.99,4.33]
plt.step(x,y)
plt.show()

问题分析

  1. 代码错误修改了原始y数据的最后一个值(从31.0改为0.0),导致数据失真;
  2. plt.step()默认使用where='pre'模式,即每个x点对应的y值在该位置立即切换,与目标阶梯线的区间恒定模式不符。

解决方案

方案1:手动构造连续阶梯线坐标

直接生成红色连续线的所有坐标点,确保每个x区间内y值恒定,再绘制并提取数据:

import numpy as np
import matplotlib.pyplot as plt

# 原始数据
x = [3.45, 3.88, 3.99, 4.33]
y = [14.0, 11.0, 14.0, 31.0]

# 生成连续阶梯线的坐标对
x_continuous = []
y_continuous = []
for i in range(len(x)-1):
    # 每个区间添加两个点:(x_i, y_i) 和 (x_{i+1}, y_i)
    x_continuous.extend([x[i], x[i+1]])
    y_continuous.extend([y[i], y[i]])
# 添加最后一个端点
x_continuous.append(x[-1])
y_continuous.append(y[-1])

# 绘制图形
plt.plot(x_continuous, y_continuous, 'r-', label='红色连续线')
plt.scatter(x, y, c='blue', label='原始离散点')
plt.legend()
plt.show()

# 提取并输出连续线数值
print("红色连续线x值:", x_continuous)
print("红色连续线y值:", y_continuous)

方案2:使用plt.step的post模式

利用plt.step()的where='post'参数,让阶梯在x点之后切换y值,匹配目标样式,再提取线条数据:

import numpy as np
import matplotlib.pyplot as plt

x = [3.45, 3.88, 3.99, 4.33]
y = [14.0, 11.0, 14.0, 31.0]

# 绘制post模式的阶梯图
line, = plt.step(x, y, where='post', color='red', label='红色阶梯线')
plt.scatter(x, y, c='blue')
plt.legend()
plt.show()

# 从线条对象中提取数值
x_step_data = line.get_xdata()
y_step_data = line.get_ydata()
print("红色阶梯线x值:", x_step_data)
print("红色阶梯线y值:", y_step_data)

两种方案都能得到符合要求的红色连续线,输出的数值即为该线的所有坐标点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:05:21