前言:
此刻看官们对“python画正态分布原理图”可能比较关切,看官们都需要知道一些“python画正态分布原理图”的相关内容。那么小编也在网上网罗了一些对于“python画正态分布原理图””的相关资讯,希望大家能喜欢,大家快快来了解一下吧!上一次我们讲解了利用Python的2D绘图库matplotlib来绘制函数图像(用Python画函数图像),下面我们来讨论如何绘制带参数的函数图像。
下面我们用正态分布的概率密度在做例子(概率密度的图像为正态分布曲线),其概率密度如下:
概率密度中包含两个参数,其中σ为分布的标准差,μ为分布的均值。
首先,根据概率密度公式,我们可以得到如下映射方法。其中参数u为均值,s为标准差;代码中的math.exp为计算自然对数e的幂,math.sqrt为开根号,math.pi为圆周率π。
import mathdef f_standard_normal_distribution(x,u,s): return math.exp((-(x-u)**2)/2*(s**2))/(math.sqrt(2*math.pi)*s)
下面,我们在绘制方法中添加参数,并将参数传到映射方法中(因为需要对应传参,此时的draw_function不能再将映射方法作为参数了)。
def draw_function(a,b,density,u,s): x=numpy.linspace(a,b,density) y=[f_standard_normal_distribution(i,u,s) for i in x] pyplot.plot(x,y) pyplot.show()
此时调用draw_function函数绘制正态分布曲线的结果如下:
draw_function(-3,3,600,0,1)
【完整代码】如下:import matplotlib.pyplot as pyplotimport numpyimport math def draw_function(a,b,density,u,s): x=numpy.linspace(a,b,density) y=[f_standard_normal_distribution(i,u,s) for i in x] pyplot.plot(x,y) pyplot.show() def f_standard_normal_distribution(x,u,s): return math.exp((-(x-u)**2)/2*(s**2))/(math.sqrt(2*math.pi)*s) draw_function(-3,3,600,0,1)
下面,我们来对以上的代码做一些优化:
1.为了可以将映射方法作为参数传入,将传入draw_function的函数参数改替换数组,并将映射方法传入。
def draw_function(a,b,density,f,param): x=numpy.linspace(a,b,density) y=[f(i,param) for i in x] pyplot.plot(x,y) pyplot.show()
对应的,也需要将映射方法中传入的参数替换为数组。
def f_standard_normal_distribution(x,param): return math.exp((-(x-param[0])**2)/2*(param[1]**2))/(math.sqrt(2*math.pi)*param[1])
调用方法也对应地修改为:
draw_function(-3,3,600,f_standard_normal_distribution,[0,1])
2.因为传递参数的数组可能并不符合映射方法的需要,如数组个数少于映射方法需要的参数个数,则会导致异常抛出。因此需在映射方法中对参数数组作出检验。
if len(param)!=2: return 0
至此,利用matplotlib绘制带参数的函数图像的小模块就更新完成了。
【完整代码】如下:import matplotlib.pyplot as pyplotimport numpyimport math def draw_function(a,b,density,f,param): x=numpy.linspace(a,b,density) y=[f(i,param) for i in x] pyplot.plot(x,y) pyplot.show() def f_standard_normal_distribution(x,param): if len(param)!=2: return 0 return math.exp((-(x-param[0])**2)/2*(param[1]**2))/(math.sqrt(2*math.pi)*param[1]) draw_function(-3,3,600,f_standard_normal_distribution,[0,1])
其他内容
运用为图表添加标题、修改颜色,以及matplotlib绘制散点图、直方图等其他图表的内容会在日后逐步更新。