如何用Python的Matplotlib绘制传感器值分段线性方程图?
解决Matplotlib绘制分段传感器线性方程图的问题
问题分析
原代码存在几个关键问题:
- 横轴范围未覆盖
STD=5200,导致无法展示分段效果 - 分段函数的第二段公式错误(应为
C(x-STD)+D而非C(x*STD)+D) - 未实现分段逻辑,而是直接绘制了两条独立直线
- 缺少每秒传感器值的红点标注
修正后的代码
import matplotlib.pyplot as plt import numpy as np # 定义参数 a = 0.1222 b = 66.268 c = 0.5200 d = 701.7080 STD = 5200 # 生成覆盖STD前后的横轴数据,范围从0到6000,确保包含分段点 x = np.linspace(0, 6000, 1000) # 计算分段函数的y值:x<STD时用Ax+B,x>STD时用C(x-STD)+D y = np.where(x < STD, a * x + b, c * (x - STD) + d) # 模拟每秒采集的传感器数据(替换为你的真实数据即可) # 这里生成15个随机分布在0-6000之间的传感器值 sensor_x = np.random.uniform(0, 6000, 15) sensor_y = np.where(sensor_x < STD, a * sensor_x + b, c * (sensor_x - STD) + d) # 绘制分段函数曲线 plt.plot(x, y, label='分段线性方程', color='blue') # 用红点标注每秒的传感器值 plt.scatter(sensor_x, sensor_y, color='red', s=30, label='每秒传感器值') # 添加STD位置的垂直线,增强分段可视化 plt.axvline(x=STD, color='gray', linestyle='--', label=f'STD = {STD}') # 设置图表标签与标题 plt.xlabel('传感器值(x)') plt.ylabel('输出值(y)') plt.title('传感器值与输出值的分段线性关系') # 显示图例 plt.legend() plt.show()
关键说明
- 横轴范围调整:将x范围设为
0-6000,完全覆盖STD=5200的前后区间,确保分段效果可见 - 分段函数实现:使用
np.where一次性完成分段计算,也可以拆分x为两部分分别计算后拼接,结果一致 - 传感器数据处理:模拟的
sensor_x和sensor_y可直接替换为你实际采集的每秒数据列表 - 红点标注:通过
plt.scatter绘制红色散点,s参数控制点的大小,确保标注清晰 - 辅助线:添加灰色虚线标记STD位置,让分段边界更直观
内容的提问来源于stack exchange,提问作者Hyunwoo Choi
相关产品推荐
相关产品推荐

