繁体   English   中英

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

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

data <- dput(data): structure(list(x = 1:16, y = c(-79.62962963, -84.72222222, -88.42592593, -74.07407407, -29.62962963, 51.38888889, 79.62962963, 96.2962963, 87.96296296, 88.42592593, 73.14814815, 12.96296296, -63.42592593, -87.03703704, -87.5, -87.96296296)), .Names = c("x", "y"), row.names = c(NA, 16L), class = "data.frame")

我用ggplot2在R中为数据集计算了一条平滑线:

p1 <- ggplot(data, aes(x=x(°), y=(%)))

library(splines)
library(MASS)
(p2 <- p1 + stat_smooth(method = "lm", formula = y ~ ns(x,3)) +
  geom_point()
)

如何计算平滑线的曲线最大值的x值?

你需要做的的计算方法得到的data.frame一些数学stat_smooth

library(ggplot2)
library(splines)
library(MASS)

data <- structure(list(x = 1:16, 
                       y = c(-79.62962963, -84.72222222, -88.42592593, 
                             -74.07407407, -29.62962963, 51.38888889, 
                             79.62962963, 96.2962963, 87.96296296, 
                             88.42592593, 73.14814815, 12.96296296, 
                             -63.42592593, -87.03703704, -87.5, 
                             -87.96296296)), .Names = c("x", "y"), 
                  row.names = c(NA, 16L), class = "data.frame") 

p1 <- ggplot(data, aes(x=x, y=y))
p1 <- p1 + stat_smooth(method = "lm", formula = y ~ ns(x,3))
p1 <- p1 + geom_point()
p1

在此处输入图片说明

gb <- ggplot_build(p1)

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

p1 + geom_vline(xintercept=exact_x_value_of_the_curve_maximum)

exact_x_value_of_the_curve_maximum
[1] 9.164557

在此处输入图片说明

也有更健壮的方法 ,但是您仍然需要ggplot_build部分来获取数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM