通过简单拟合预测x值并在图中标注它

时间:2016-05-26 08:30:11

标签: r ggplot2 lm

我有一个非常简单的问题,但到目前为止找不到简单的解决方案。假设我有一些我想要拟合的数据并显示其x轴值,其中y是特定值。在这种情况下,假设当y = 0时x值是多少。模型非常简单y~x用于拟合,但我不知道如何从那里估算x值。无论如何,

示例数据

library(ggplot2)
library(scales)
df = data.frame(x= sort(10^runif(8,-6,1),decreasing=TRUE), y = seq(-4,4,length.out = 8))

ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  #geom_smooth(method = "lm", formula = y ~ x, size = 1,linetype="dashed",  col="black",se=FALSE, fullrange = TRUE)+
  geom_smooth(se=FALSE)+
  labs(title = "Made-up data") + 
  scale_x_log10(breaks =  c(1e-6,1e-4,1e-2,1),
                labels = trans_format("log10", math_format(10^.x)),limits = c(1e-6,1))+
  geom_hline(yintercept=0,linetype="dashed",colour="red",size=0.6)

我想将1e-10输入转换为10 ^ -10格式并在图上注释。正如我在情节中指出的那样。

提前感谢!

enter image description here

1 个答案:

答案 0 :(得分:3)

由于geom_smooth()使用R函数计算平滑线,因此您可以获得ggplot()环境之外的预测值。在给定预测的y值approx()的情况下,一种选择是使用0来获得x值的线性近似值。

# Define formula
formula <- loess(y~x, df)

# Approximate when y would be 0
xval <- approx(x = formula$fitted, y = formula$x, xout = 0)$y

# Add to plot
ggplot(...) + annotate("text", x = xval, y = 0 , label = yval)

enter image description here