绘制R中函数的行

时间:2014-09-26 09:57:55

标签: r graph

我有以下脚本:

FGM = function (n,r,z){
  x = r*sqrt(n)/(2*z)
  Px = 1-pnorm(x)
}
re = 10000
data = data.frame(abs(rnorm(re,0,1)), abs(rnorm(re,0,1)), abs(rnorm(re,0,1)))
colnames(data) = c("n","r","z")
data$Px = FGM(data$n,data$r,data$z)
data$x = data$r*sqrt(data$n)/(2*data$z)

par(mar=c(4.5,4.5,1,1))
plot(data$x,data$Px, xlim = c(0,3), pch = 19, cex = 0.1, xaxs="i", yaxs="i",
     xlab = expression(paste("Standardized mutational size (",italic(x), ")")), 
     ylab = expression(paste("P"[a],"(",italic(x),")")))

enter image description here 这是图found here (box 2)的重新创建。您可以在此脚本中看到我通过绘制具有各种n,z和r值的10000个小黑点来实现此目的。这看起来像是一个丑陋的工作,我想我应该能够给我的功能

FGM = function (n,r,z){
  x = r*sqrt(n)/(2*z)
  Px = 1-pnorm(x)
  }

让它在图表上绘制一条线。然而,在网上搜索几个小时一直没有效果,我尝试了一些abline和lines的方法,但没有任何效果,有没有办法用这些函数或其他函数来做?

试过这个......

plot(data$x,data$Px, xlim = c(0,3), ylim = c(0,0.5), xaxs="i", yaxs="i",
 xlab = expression(paste("Standardized mutational size (",italic(x), ")")), 
 ylab = expression(paste("P"[a],"(",italic(x),")")), type = "n")
curve(1-pnorm(r*sqrt(n)/(2*z)), add=T)
>Error in curve(1 - pnorm(r * sqrt(n)/(2 * z)), add = T) : 
  'expr' must be a function, or a call or an expression containing 'x'
> 

@PaulRegular提供了这个解决方案,但它仍然是根据数据绘制的,而不是公式本身。我正在寻找一种能够正确生成曲线的解决方案,而没有大的“重新”值 - 使用以下但“re”设置为10你可以看到我的意思......

data <- data[order(data$x),]
lines(data$x, data$Px, lwd=1)

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以将一个变量的函数传递给plot。我猜你正在寻找:

    plot(function(x) 1-pnorm(x),0,3)

答案 1 :(得分:0)

尝试按x排序数据,然后添加以下行:

data <- data[order(data$x),]
lines(data$x, data$Px, lwd=2)