计算R和ggplot2中平滑线的曲线最大值的y值

时间:2015-12-07 15:04:47

标签: r ggplot2 curve-fitting spline best-fit-curve

我跟进了这里提出的一个老问题:

calculate x-value of curve maximum of a smooth line in R and ggplot2

如何计算曲线最大值的Y值?

干杯

1 个答案:

答案 0 :(得分:3)

在我看来,“x”到“y”和“vline”到“hline”和“xintercept”到“yintercept”的代码更改将是所有需要的:

gb <- ggplot_build(p1)

exact_y_value_of_the_curve_maximum <- gb$data[[1]]$y[which(diff(sign(diff(gb$data[[1]]$y)))==-2)+1]

p1 + geom_hline( yintercept =exact_y_value_of_the_curve_maximum)

exact_y_value_of_the_curve_maximum

我不认为我会称之为“确切”,因为它们只是数字估计。获得该值的另一​​种方法是

max(gb$data[[1]]$y)

由于可以检查该构建对象的$ data元素:

> str(gb$data)
List of 2
 $ :'data.frame':   80 obs. of  7 variables:
  ..$ x    : num [1:80] 1 1.19 1.38 1.57 1.76 ...
  ..$ y    : num [1:80] -123.3 -116.6 -109.9 -103.3 -96.6 ...
  ..$ ymin : num [1:80] -187 -177 -166 -156 -146 ...
  ..$ ymax : num [1:80] -59.4 -56.5 -53.5 -50.3 -46.9 ...
  ..$ se   : num [1:80] 29.3 27.6 25.9 24.3 22.8 ...
  ..$ PANEL: int [1:80] 1 1 1 1 1 1 1 1 1 1 ...
  ..$ group: int [1:80] 1 1 1 1 1 1 1 1 1 1 ...
 $ :'data.frame':   16 obs. of  4 variables:
  ..$ x    : num [1:16] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ y    : num [1:16] -79.6 -84.7 -88.4 -74.1 -29.6 ...
  ..$ PANEL: int [1:16] 1 1 1 1 1 1 1 1 1 1 ...
  ..$ group: int [1:16] 1 1 1 1 1 1 1 1 1 1 ...