绘制指定阶梯图并提取连续红线数值技术求助
阶梯图绘制与数值提取方案
问题说明
给定离散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()
问题分析
- 代码错误修改了原始y数据的最后一个值(从31.0改为0.0),导致数据失真;
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
相关产品推荐
相关产品推荐

