首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2:用ggplot2绘制曲线

ggplot2:用ggplot2绘制曲线
EN

Stack Overflow用户
提问于 2015-09-12 12:06:37
回答 1查看 539关注 0票数 0

伙计们,我在绘制数据上有点麻烦。我有两种方法,两者都给出了不同的结果。我还是不明白。

在之前的一篇文章中,有人告诉我ggplot2中的函数“ggplot2”--它就像“曲线”-function,但是我没有得到相同的结果。

第一个。Methode (带曲线):

代码语言:javascript
复制
# draw.data:
draw.data <- function(xy,xlab="log10",ylab="",pch=16,col=1){
    plot(xy,xlab=xlab,ylab=ylab,pch=pch,col=col)
}

# f.probit
f.probit <- function(x,beta1=0,beta2=1,minv=0,maxv=1){
return(pnorm(beta1+beta2*x)*(maxv-minv)+minv)
}

# draw.probit
draw.probit <-function(beta1=0,beta2=1,minv=0,maxv=1,col=1,
lwd=2,lty=1,add=T,from=0,to=1){
  if (add){
    curve(f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv),add=T,col=col,lwd=lwd,lty=lty)
  }else{
    curve(f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv),from=from,to=to,col=col,lwd=lwd,lty=lty)
  }
}

第二名。Methode (与ggplot一起)

代码语言:javascript
复制
# draw.data:
draw.data <- function(xy, add = F, mod = "Data", FUN = NULL){
  # Bibliothek für ggplot-Funktion
  # Dependencies: > library("ggplot2") must be imported!

  x.lab <- "concentration [M]"
  y.lab <- "normalised luminescence [%]"

  my_labels <- parse(text = paste("1E", seq(-10, -4, 1), sep = ""))

  # Find max, min and difference
  # y.max <- max(my.data$y)
  # y.min <- min(my.data$y)

  y.max <- 1
  y.min <- 0

  diff <- y.max - y.min

  # Find percentage and apply to new column 
  data <- data.frame(xy)
  my.data <- data.frame(x=data$x,y=apply(data, 1, function(z) ((z['y'] - y.min)/diff)*100),model = mod)

  if(!add){
    quartz() # windows() unter MS Windows
    ggplot(my.data, aes(x, y, group = model, color = model)) +
    geom_point() +
    #geom_line() +
    #stat_function(fun = FUN, geom = "line", aes(group = model, colour = model)) +
      # Draw 2 lines at 50% and 90% through the y-axis
    geom_hline(yintercept = c(50, 90), linetype = "dotted") + # draw dotted horizontal lines at 50 and 90
    scale_x_continuous(x.lab, breaks = seq(-10, -4, 1), labels = my_labels) + 
    labs(title = "Graph", x = x.lab, y = y.lab)
  } else{
    #geom_line(aes(x, y, group = model, color = model), data = my.data) +
    stat_function(fun = FUN, geom = "line", aes(x, y, group = model, colour = model))
  }
}

# f.probit remains the same!

# draw.probit
draw.probit <- function(xy, beta1 = 0, beta2 = 1,minv = 0, maxv = 1, 
                        mod = "Probit", add = T){
  # Aufruf der Funktion f.probit zur Verbesserung der y-Werte
  #f <- f.probit(xy[,1],beta1=beta1,beta2=beta2,minv=minv,maxv=maxv)

  selected_FUN <- function(x){
      f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv)
  }

  draw.data(xy, add, mod, selected_FUN)
}

以下是更多的数据:

代码语言:javascript
复制
> xy
        x          y
 [1,] -10 1.14259527
 [2,]  -9 1.15024188
 [3,]  -8 1.10517450
 [4,]  -7 1.00961311
 [5,]  -6 0.71238360
 [6,]  -5 0.20355333
 [7,]  -4 0.04061895
 [8,] -10 1.11022461
 [9,]  -9 1.11083317
[10,]  -8 1.07867942
[11,]  -7 0.98422000
[12,]  -6 0.73539660
[13,]  -5 0.36134577
[14,]  -4 0.18124645
[15,] -10 2.13212408
[16,]  -9 1.14529425
[17,]  -8 1.25102307
[18,]  -7 1.16045169
[19,]  -6 0.50321380
[20,]  -5 0.15422609
[21,]  -4 0.10198811
[22,] -10 1.16539392
[23,]  -9 1.15855333
[24,]  -8 1.11766975
[25,]  -7 0.97204379
[26,]  -6 0.53504417
[27,]  -5 0.17431435
[28,]  -4 0.29470416
[29,] -10 1.03683145
[30,]  -9 1.07524250
[31,]  -8 1.07761291
[32,]  -7 0.96401682
[33,]  -6 0.78346457
[34,]  -5 0.32783725
[35,]  -4 0.08103084
[36,] -10 0.81372339
[37,]  -9 0.85402909
[38,]  -8 0.86584396
[39,]  -7 0.80705470
[40,]  -6 0.53086151
[41,]  -5 0.15711034
[42,]  -4 0.11496499

现在,当我在两种情况下启动draw.data(xy)时,我分别得到了以下曲线:

这正是我所期望的。但当我开始“draw.probit”时,我得到:

第一个。(如预期):

代码语言:javascript
复制
> draw.probit(beta1 -4.827511, beta2 = -0.8401166, minv = 0.05, maxv = 1, add = T)

第二名。卫理德(错误)

代码语言:javascript
复制
mapping: x = x, y = y, group = model, colour = model 
geom_line:  
stat_function: fun = function (x) 
{
    f.probit(x, beta1 = beta1, beta2 = beta2, minv = minv, maxv = maxv)
}, n = 101, args = list() 
position_identity: (width = NULL, height = NULL)
> 

现在的问题是:)

我能做些什么才能得到和第一条一样的曲线。方法..。有人能帮忙吗?我厌倦了尝试每一件事。

谢谢你们!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-20 22:38:53

我想你要找的答案可能在这里的某个地方找到。这是一两年前的一个问题,展示了如何将logit和probit模型与ggplot2曲线相匹配的很好的例子。我相信你要找的是

代码语言:javascript
复制
stat_smooth(method="glm",family="binomial",link="probit")

但为了让它发挥作用,你可能得玩一玩。当我尝试使用数据集的一个子集时,我得到了一个错误。

代码语言:javascript
复制
Error in eval(expr, envir, enclos) : y values must be 0 <= y <= 1

这与回归模型的建立有关。您可能会发现一些这些 链接对处理这个问题很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32538587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档