python怎么画参数函数图像_⽤Python绘制带参数的函数图像上⼀次我们讲解了利⽤Python的2D绘图库matplotlib来绘制函数图像(⽤Python画函数图像),下⾯我们来讨论如何绘制带参数的函数图像。
下⾯我们⽤正态分布的概率密度在做例⼦(概率密度的图像为正态分布曲线),其概率密度如下:
⽤Python绘制带参数的函数图像
概率密度中包含两个参数,其中σ为分布的标准差,μ为分布的均值。
⾸先,根据概率密度公式,我们可以得到如下映射⽅法。其中参数u为均值,s为标准差;代码中的p为计算⾃然对数e的
幂,math.sqrt为开根号,math.pi为圆周率π。import math
def f_standard_normal_distribution(x,u,s):
p((-(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)
⽤Python绘制带参数的函数图像【完整代码】如下:
import matplotlib.pyplot as pyplot
import numpy
import 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)
linspace numpypyplot.show()
def f_standard_normal_distribution(x,u,s):
p((-(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):
p((-(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 pyplot
import numpy
import 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
p((-(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绘制散点图、直⽅图等其他图表的内容会在⽇后逐步更新。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。