【问题标题】:Graphing a function in R: how do I draw many curves using parameter values in a data table?在 R 中绘制函数:如何使用数据表中的参数值绘制多条曲线?
【发布时间】:2015-09-28 07:19:09
【问题描述】:

我是使用 R 的新手。我有一个带有 4 个参数(c、w、pl、pr)的函数。

curve(1-(pl+(0.5*(pr-pl))*(1+tanh(2*(x-c)/w))),xlim=c(-27,50),ylim=c(0,1),lwd=3,col=2, add=T)

我可以通过手动指定每个参数的值来绘制该函数。

c = 4
w = 6
pl = 0
pr = 1

最终,我想要绘制数千条曲线,因此我希望能够告诉 R 参数估计值在表格中。每一行是一条曲线的数据

hzdata
pl pr  w c
1  1  0  3 0
2  1  0  4 0
3  1  0  5 0
4  1  0  6 0
5  1  0  7 0
6  1  0  8 0
7  1  0  9 0
8  1  0 10 0

如何告诉 R 我想一次在同一张图上绘制所有这些曲线?提前致谢!!

【问题讨论】:

    标签: r function plot


    【解决方案1】:

    这是使用quoteeval创建可与公式和变量data.frame(列名需要与formla中使用的参数匹配)一起使用的通用函数的一种方法

    ## Your formula, changed add=add and col=col to allow to vary
    form <- quote(
        curve(1-(pl+(0.5*(pr-pl))*(1+tanh(2*(x-c)/w))),xlim=c(-27,50),ylim=c(0,1),lwd=3,col=col,add=add)
    )
    
    plotFun <- function(params, form, colors) {
        eval(form, as.list(c(params[1,], col=colors[1], add=F)))  # plot the first
        for (i in 2:nrow(params))                                 # plot the rest, adding to the first
            eval(form, as.list(c(params[i,], col=colors[i], add=T)))
    }
    
    colors <- colorRampPalette(c("red", "yellow"))(nrow(hzdata))
    plotFun(hzdata, form, colors=colors)
    

    【讨论】:

      【解决方案2】:

      我会遍历你的行。你可以这样做

      hzf <- function(x, pl,pr,w,c) 1-(pl+(0.5*(pr-pl))*(1+tanh(2*(x-c)/w)))
      
      for(i in 1:nrow(hzdata)) {
          with(hzdata[i,],
             curve(hzf(x,pl,pr,w,c), xlim=c(-27,50), ylim=c(0,1), 
             lwd=3,col=i, add=i!=1)
          )
      }
      

      给了

      【讨论】:

      • 非常感谢您的快速响应!
      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多