繁体   English   中英

绘制R中函数的行

[英]Plot line of a function in R

我有以下脚本:

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),")")))

在此输入图像描述 这是在这里找到的图表的重新创建(方框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”值 - 使用以下但是“re”设置为10你可以看出我的意思......

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

在此输入图像描述

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM