如何使用numpy和matplotlib绘制两个不同x数组对应曲线的最小值
解决方案
要实现不同x坐标序列的两条曲线取最小值段绘制,核心思路是将两条曲线统一插值到公共x网格上,再做数值比较筛选,该方案不依赖原始函数信息,完全适配数据集场景。
完整实现代码
import numpy as np import matplotlib.pyplot as plt # 原始数据(可替换为你的实测数据集) x1 = np.linspace(-2,2,100) x2 = np.linspace(0,4,100) y1 = x1**2+1 y2 = (x2-1.5)**2 # (可选)如果原始x数组非单调,先执行排序操作 # sort_idx1 = np.argsort(x1) # x1, y1 = x1[sort_idx1], y1[sort_idx1] # sort_idx2 = np.argsort(x2) # x2, y2 = x2[sort_idx2], y2[sort_idx2] # 步骤1:确定两组x的公共取值范围 x_min = max(x1.min(), x2.min()) x_max = min(x1.max(), x2.max()) # 生成高分辨率统一x网格,点数可按需调整,越高曲线越平滑 x_uniform = np.linspace(x_min, x_max, 1000) # 步骤2:将两条曲线插值到统一x网格上 y1_interp = np.interp(x_uniform, x1, y1) y2_interp = np.interp(x_uniform, x2, y2) # 步骤3:掩码筛选各自的最小值段并绘图 mask_y1 = y1_interp < y2_interp plt.plot(x_uniform[mask_y1], y1_interp[mask_y1], c='#1f77b4', label='y1最小值段') mask_y2 = y2_interp < y1_interp plt.plot(x_uniform[mask_y2], y2_interp[mask_y2], c='#ff7f0e', label='y2最小值段') plt.legend() plt.show()
方案特性
- 通用性强:无需知晓y1、y2的生成函数,仅需两组对应的x、y数组即可使用
- 效率高:所有操作为numpy向量化运算,即使是万级以上的数据点也可快速处理
- 可扩展:支持任意多条曲线的最小值段筛选,只需将所有曲线插值到同一公共x网格后逐点取最小值即可
内容的提问来源于stack exchange,提问作者The One
相关产品推荐
相关产品推荐

