如何在多曲线图表中根据指定x轴值获取对应y轴值
获取指定x值对应曲线的y轴数值
你的曲线由离散点绘制,要得到任意垂直线(指定x值)与曲线交点的精确y值,核心是用插值法补全离散点之间的数值。R中可以用approx()或approxfun()实现,下面是针对你示例代码的具体操作:
步骤1:为每条曲线创建插值函数
approxfun()会生成一个可直接调用的插值函数,默认采用线性插值(最贴合你绘图时的折线连接逻辑),也支持三次样条插值:
x1=c(1,5,7,9,15) y1=c(50,30,43,33,12) x2=c(1,3,5.5,6,15) y2=c(20,55,44,38,10) # 为两条曲线分别生成插值函数 f_curve1 <- approxfun(x1, y1) f_curve2 <- approxfun(x2, y2) # 若需要三次样条插值,添加method参数 # f_curve1 <- approxfun(x1, y1, method = "spline")
步骤2:计算目标x值对应的y值
直接调用插值函数,传入你需要的x值(比如示例中的2.5、4、6、10):
target_x <- c(2.5, 4, 6, 10) # 获取每条曲线的对应y值 y_curve1 <- f_curve1(target_x) y_curve2 <- f_curve2(target_x) # 整理成数据框方便查看 result_df <- data.frame( 目标x值 = target_x, 曲线1的y值 = y_curve1, 曲线2的y值 = y_curve2 ) print(result_df)
运行后会得到如下结果:
目标x值 曲线1的y值 曲线2的y值 1 2.5 45.0 47.5 2 4.0 35.0 49.5 3 6.0 36.5 38.0 4 10.0 30.0 22.0
说明
- 线性插值:计算两点之间的直线对应y值,和你绘图时的
type="o"折线逻辑完全一致; - 三次样条插值:会生成更平滑的曲线插值结果,适合需要连续曲线的场景;
- 如果目标x超出了曲线的x范围(比如x=0或x=20),默认会返回
NA,可以通过rule参数控制,比如approxfun(x1, y1, rule=2)会用边界值填充超出范围的x。
内容的提问来源于stack exchange,提问作者Stat fellow
相关产品推荐
相关产品推荐

