如何处理由ggplot的stat_function创建的曲线中的弯折?

时间:2019-06-22 19:55:44

标签: r ggplot2

我正在使用stat_function在一个ggplot中绘制10个不同样本的回归曲线。绘制的曲线显示了不应该靠近y轴的扭结。

我无法确定相应的x值。我尝试了许多不同的Tmax值,并且扭结似乎保持在y轴附近,无论我尝试哪种Tmax。所以我假设stat_function有问题。我最终要使用的Tmax是3500,在这种情况下,扭结非常明显,似乎在x = 50左右。 我还尝试使用来自底数R的my_curve为单个样本绘制plot()函数-它为我提供了所要的连续曲线。 我想使用ggplot。因此,如果有人知道那里发生了什么,我将不胜感激。

这是一个具有回归系数和常数的伪数据帧:

set.seed(2)  
regressions <- 
  data.frame(sample = factor(1:10),   
             intercept = rnorm(10, -1, 0.1),   
             sqrtTime = rnorm(10, -0.1, 0.0001),   
             Time = rnorm(10, 0.001, 0.0001),   
             b3 = rnorm(10, 0.5, 0.1),   
             x3 = rnorm(10, 7, 1))

函数和图解:

my_curve = function(x, b0, b1, b2, b3, x3) {  
  y = b0 + b1*sqrt(x) + b2*x + b3*x3  
  return(y)  
}

ggplot(aes(x), data = data.frame(x = c(0:Tmax))) +   
  mapply(function(b0, b1, b2, b3, x3, sample){  
    stat_function(fun = my_curve, args = list(b0 = b0,  
                                           b1 = b1,  
                                           b2 = b2,  
                                           b3 = b3,  
                                           x3 = x3),  
                  aes(colour = sample))  
  },  
  b0 = regressions$intercept,  
  b1 = regressions$sqrtTime,  
  b2 = regressions$Time,  
  b3 = regressions$b3,  
  x3 = regressions$x3,  
  sample = regressions$sample  
  )   

ggplot with tmax = 3500

1 个答案:

答案 0 :(得分:0)

不,没有。您可以使用基本图形进行复制,并且仍然可以看到它。

same plot with base graphics 您要绘制的曲线会导致y值介于0和1之间,因此在这些值之间绘制一条线(线是{ "Id": "AAA-BB-45555", "Email": "name@hotmail.com", "UserId": "425", "Name": "John Paul", "Total": "12.50", "Billing": { "Name": "John Paul", "Address": { "Address1": "line1...", "Address2": "line2..." } }, "Products": [ { "ItemId": "AAABB", "Name": "Product 1" }, { "ItemId": "AAVVV", "Name": "Product 2" } ] } 的默认geom)时,您总是会看到一个扭结。

如果将x间隔减小到小于1(例如,使用stat_function),则扭结将不太明显(但是请注意,这会占用大量计算资源!)。否则,可以从间隔中排除0或扩展y轴,以使扭结的角度不太明显。