5

我想画一个幂律函数,它取决于三个参数:xagamma。该函数如下所示:

powerlaw <- function(x, a, gamma){
   a*(x**(-gamma))
}

现在我想绘制它,但我无法弄清楚如何指定agamma告诉 R 使用选择的范围x。我试过这个:

require(ggplot2)
qplot(c(1,10), stat="function", fun=powerlaw(x, a=1, gamma=1), geom="line")

但它说

Error in (x^(-gamma)): x is missing  

当然,以下代码通过修复aand来工作gamma

powerlaw1 <- function(x){
   1*(x**(-1))
}
qplot(c(1,10), stat="function", fun=powerlaw1, geom="line")

有任何想法吗?

4

2 回答 2

3

您需要单独指定参数:

qplot(x=c(1,10), stat="function", 
      fun=powerlaw, geom="line", 
      arg=list(a=1, gamma=1))

有关?stat_function更多详细信息,请参阅。

于 2012-11-01T10:32:48.750 回答
2

我只想创建一个返回data.frame适当的函数ggplot2

power_data = function(x, a, gamma) {
   return(data.frame(x = x, y = a * (x**(-gamma))))
}

> power_data(1:10, 1, 1)                                           
    x         y                                                    
1   1 1.0000000                                                    
2   2 0.5000000                                                    
3   3 0.3333333                                                    
4   4 0.2500000                                                    
5   5 0.2000000                                                    
6   6 0.1666667                                                    
7   7 0.1428571                                                    
8   8 0.1250000                                                    
9   9 0.1111111
10 10 0.1000000

并制作一个情节(请注意,我使用更紧密的x系列来获得更平滑的线条):

dat = power_data(seq(1,10,0.01), 1, 1)
qplot(dat$x, dat$y, geom = "line")

在此处输入图像描述

于 2012-11-01T10:37:44.333 回答