2016-05-26 42 views
0

我有一個非常簡單的問題,但到目前爲止找不到簡單的解決方案。假設我有一些我想要擬合的數據,並顯示其x軸值,其中y是特別值。在這種情況下,讓我們說y = 0時x值是多少。模型是非常簡單的y〜x擬合,但我不知道如何從那裏估計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

+2

'ggplot2'是一個圖形工具,而不是建模工具。您必須重新創建該模型,然後在其上使用具有感興趣的「x」的'predict'。 –

+0

然後將其添加到圖。 –

+0

完美;所以我想你也知道那不是一個建模工具呢?這不是因爲你可以定義一個可以使用構建模型的公式。所以你必須自己重新創建它。它似乎愚蠢但是,這樣,你確切地知道你在做什麼。 –

回答

2

由於geom_smooth()使用R裏面的函數來計算平滑線,可以實現ggplot()環境之外的預測值。然後一種選擇是使用approx()來獲得x值的線性近似值,給出預測的y值0

# 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

+0

感謝您的回答。我們如何使這個數字格式與x軸相同? – Alexander

+0

您可以分享您的解決方案作爲這個問題的答案嗎? – Alexander

+0

請參閱這裏:http://stackoverflow.com/questions/11610377/how-do-i-change-the-formatting-of-numbers-on-an-axis-with-ggplot – mtoto