使用样条插值绘图并标注最大值对应x、y轴数值的实现方法
最大值点虚线标注实现方案
你提供的示例代码中x_数组长度为5,y_数组长度为6,长度不匹配会导致插值函数报错,我们先统一两组数据长度后再实现标注功能。
实现该需求的核心逻辑是调用matplotlib的内置方法绘制垂直/水平虚线,再在坐标轴旁添加对应数值标注即可,完整可运行代码如下:
import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import make_interp_spline # 修正原数据长度不匹配问题 x_ = np.array([1, 2.5, 2.7, 3, 8]) y_ = np.array([1, 2, 3, 5, 4]) # 样条插值生成平滑曲线 spline = make_interp_spline(x_, y_) x = np.linspace(x_.min(), x_.max(), 500) y = spline(x) # 定位曲线最大值点 xmax = x[np.argmax(y)] ymax = y.max() # 绘制基础曲线与最大值标记点 plt.plot(x, y) plt.plot(xmax, ymax, 'o', color='crimson') # 绘制指向x轴的垂直虚线 # ymax参数取值为0~1,代表虚线终点在y轴总高度的占比,计算后刚好从最大值点落到x轴 plt.axvline( x=xmax, ymin=0, ymax=(ymax - plt.ylim()[0])/(plt.ylim()[1] - plt.ylim()[0]), linestyle='--', color='gray', alpha=0.7 ) # 绘制指向y轴的水平虚线 # xmax参数取值为0~1,代表虚线终点在x轴总宽度的占比,计算后刚好从最大值点落到y轴 plt.axhline( y=ymax, xmin=0, xmax=(xmax - plt.xlim()[0])/(plt.xlim()[1] - plt.xlim()[0]), linestyle='--', color='gray', alpha=0.7 ) # 在x轴旁标注最大值对应的x数值 plt.text( xmax, plt.ylim()[0], f'x={xmax:.2f}', ha='center', va='top', color='crimson' ) # 在y轴旁标注最大值对应的y数值 plt.text( plt.xlim()[0], ymax, f'y={ymax:.2f}', ha='right', va='center', color='crimson' ) plt.show()
如果需要调整标注的位置、颜色或者虚线的样式,直接修改对应参数即可。
内容的提问来源于stack exchange,提问作者ellekalle
相关产品推荐
相关产品推荐

