【问题标题】:Plot line of a function in RR中函数的绘图线
【发布时间】:2014-11-21 07:22:17
【问题描述】:

我有以下脚本:

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

这是图表found here (box 2) 的再现。您可以在此脚本中看到,我只需绘制 10000 个具有不同 n、z 和 r 值的小黑点即可。这似乎是一个丑陋的解决方法,我想我应该能够给 R 我的功能

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)

【问题讨论】:

  • 我们中的许多人都无法免费访问这篇文章。
  • 运行脚本会显示同样的东西@pascal
  • 然后删除无用的链接。
  • 将您从脚本输出的示例图添加到您自己的问题中。
  • 你的函数是矢量化的。不需要mapply()。使用FGM( data$n,data$r,data$z ) 将产生相同的结果!

标签: r graph


【解决方案1】:

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

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

【讨论】:

  • 更简单:curve(1-pnorm(x),0,3)
【解决方案2】:

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

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

【讨论】:

  • 谢谢,它确实会产生线条,但我正在寻找一种从公式而不是数据中绘制的解决方案 - 我应该更清楚地说明,我将编辑 Q
  • 对不起,回头看你的问题很清楚......我看到你使用了点,所以我很高兴地展示了如何让它绘制一条线。
猜你喜欢
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2012-03-25
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
相关资源
最近更新 更多