norm vs lognorm plot

时间:2013-01-11 15:00:32

标签: python matplotlib scipy

我想使用以下代码绘制Normal与Log-Normal函数:

from scipy.stats import norm, lognorm
import numpy as np
import matplotlib.pyplot as plt
# example: r(t) = ln(1 + R(t)) ~ N(0.05, (0.5)^2))
#          1 + R(t) = exp(r(t)) ~ logNormal(0.05, (0.5)^2)
#          R(t) = e(r(t)) - 1 ~ logNormal(0.05, (0.5)^2) - 1
#  
# plot normal and log normal density
mu = .05
sd = .5
x = np.linspace(mu - 3 * sd, mu + 3 * sd, 100)
plt.plot(x, norm.pdf(x, mu, sd), label="Normal") 
plt.plot(exp(x)-1, lognorm.pdf(exp(x), mu, sd), '--', label="Log-Normal")

有什么问题?我期待类似:norm vs lognorm

2 个答案:

答案 0 :(得分:3)

lognorm.pdf函数中的参数顺序与您的想法不同! 当您将订单反转为: lognorm.pdf(exp(x), sd, mu),你得到了你期待的情节。

编辑:documentation提供pdf(x, s, loc=0, scale=1)

答案 1 :(得分:2)

关于阅读python文档/函数调用如何工作的简要说明:

没有默认值的参数,即some_fun(a,b)是必需的位置参数(或python将引发有关参数数量的错误),并根据函数调用中的位置进行分配。如果有一个默认值,即some_other_fun(a,b,c=None,d=0),它们被称为关键字参数,并且是可选的。您可以通过两种方式使用可选参数,如果不使用关键字,则将它们视为位置参数。如果您给出的参数少于签名中参数的总数,则会按顺序分配这些值,其余参数将采用其默认值。您还可以使用关键字表单仅指定所需的可选参数,然后为列表中的所有内容提供值,即some_other_fun(1,2,d=3)不同于some_other_fun(1,2,3)

因此,当您致电lognorm.pdf(x,sd,mu)时,您的约束力为x=xs=sdloc=muscale=1,就像norm.pdf(x,mu,sd)一样绑定x=xloc=muscale=sd

另请参阅tutorial的此部分。