Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 绘制多元一元正态分布图_Python_Matplotlib_Normal Distribution - Fatal编程技术网

Python 绘制多元一元正态分布图

Python 绘制多元一元正态分布图,python,matplotlib,normal-distribution,Python,Matplotlib,Normal Distribution,有人知道如何使用Python在一个绘图上绘制多个高斯分布吗? 我得到了一些正态分布的数据,有不同的平均值和标准差,我需要绘制它们。很多 我只能画一张。请简单一点,我刚刚开始使用Python,让我们假设你有3种不同的平均值mu和标准设备sigma的组合。你可以随意选择,但举个例子,我用了3 from matplotlib import pyplot as mp import numpy as np def gaussian(x, mu, sig): return 1./(np.sqrt(

有人知道如何使用Python在一个绘图上绘制多个高斯分布吗? 我得到了一些正态分布的数据,有不同的平均值和标准差,我需要绘制它们。很多
我只能画一张。请简单一点,我刚刚开始使用Python,让我们假设你有3种不同的平均值
mu
和标准设备
sigma
的组合。你可以随意选择,但举个例子,我用了3

from matplotlib import pyplot as mp
import numpy as np

def gaussian(x, mu, sig):
    return 1./(np.sqrt(2*np.pi)*sigma)*np.exp(-0.5 * (1./sigma*(x - mu))**2)

for mu, sig in [(0.5, 0.1), (1.0, 0.2), (1.5, 0.3)]: #(mu,sigma)
    mp.plot(gaussian(np.linspace(-8, 8, 100), mu, sig))

mp.show()
定义您的
mu
sigma
在这一行中,您可以添加任意数量的组合:

for mu, sig in [(0.5, 0.1), (1.0, 0.2), (1.5, 0.3)]: #(mu,sigma)
就我而言是这样

  • μ=0.5,σ=0.1
  • μ=1.0,σ=0.2
  • μ=1.5,σ=0.3
结果

*编辑

%matplotlib inline
from matplotlib import pyplot as mp
import numpy as np

def gaussian(x, mu, sig):
    return 1./(np.sqrt(2*np.pi)*sigma)*np.exp(-0.5 * (1./sigma*(x - mu))**2)

for mu, sigma in [(1, 2), (0.5, 1), (0, 0.5)]: #(mu,sigma)
    mp.plot(gaussian(np.linspace(-4, 6, 100, ), mu, sigma))
    mp.xlim(0,110)  #set x-axes limits
    mp.ylim(0,1)  #set y-axes limits

mp.show()
结果:


由@dejanmarich提出的解决方案有一个小问题。x轴上的值与数据分布中的实际值不一致。为了解决这个问题,我们不应该生成任意的线性间隔范围

我们希望有一个x从下界到上界的情节,这样的中值位于中间。以下代码片段实现了此目标:

#/usr/bin/python
将numpy作为np导入
将matplotlib.pyplot作为plt导入
高斯类:
@静力学方法
def图(平均值、标准值、下限=无、上限=无、分辨率=无、,
title=None,x\u label=None,y\u label=None,legend\u label=None,legend\u location=“best”):
下限=(平均值-4*std),如果下限不是其他下限
上界=(平均值+4*std),如果上界不是其他上界
分辨率=100
标题=标题或“高斯分布”
x_标签=x_标签或“x”
y_标签=y_标签或“N(x |μ,σ)”
图例标签=图例标签或“μ={},σ={}”。格式(平均值,标准)
X=np.linspace(下限、上限、分辨率)
距离X=高斯分布(X,平均值,标准值)
标题(标题)
plt.绘图(X,距离X,标签=图例标签)
plt.xlabel(x_标签)
plt.ylabel(y_标签)
plt.图例(位置=图例位置)
返回plt
@静力学方法
def_分布(X,平均值,标准值):
返回1./(np.sqrt(2*np.pi)*std)*np.exp(-0.5*(1./std*(X-平均值))**2)
一旦定义了类,我们可以用以下方式绘制高斯分布:

Gaussian.plot(0.5,1).show()
#或者,对于多个绘图:
绘图=高斯。绘图(1,2)
曲线图=高斯曲线图(0.5,1)
绘图=高斯。绘图(0,0.5)
plot.show()

这里我们定义或计算边界x范围。计算使用平均值和4倍标准偏差,以使绘图居中

这是一个非常简单的类,可以对其进行扩展以解决某些问题。1) 除非绘制多个图,否则我们(似乎)会看到同一个图,并且在绘制多个分布时,尾部会被截断

1) 通过将
plt.ylim(0,1)
添加到
plot
方法,可以很容易地修复此问题。2) 另一方面,要求我们在绘制时考虑到所有地块的形状

为了做到这一点,我们可以把我们的班级改成一个班级。我们首先汇总所有绘图信息,并仅在准备绘制所有绘图时计算x范围

以下课程实现了这一目标:

#/usr/bin/python
将numpy作为np导入
将matplotlib.pyplot作为plt导入
高斯点类:
定义初始值(self,title=“高斯分布”,x_label=“x”,y_label=None,
y_极限=无,下限=无,上限=无,
当网格=True时,在下方填充=True,图例位置=best”):
self.title=标题
self.x_标签=x_标签
self.y_label=y_label或“N({}μ,σ)”。格式(x_label)
self.y\u limit=y\u limit
self.lower\u bound=下限
self.upper\u bound=上界
self.with_grid=with_grid
self.fill\u below=下面的fill\u
self.legend\u location=legend\u location
self.plots=[]
def图(自身、平均值、标准、分辨率=无,图例标签=无):
self.plots.append({
“平均”:平均,
“性病”:性病,
“决议”:决议,
“图例标签”:图例标签
})
回归自我
def显示(自我):
自我准备图()
self.\u绘制图()
plt.图例(loc=自身图例位置)
plt.show()
定义准备图(自身):
plt.图()
产品名称(自我名称)
plt.xlabel(self.x_标签)
plt.ylabel(自y_标签)
如果self.y_limit不是无:
plt.ylim(0,自y_极限)
如果使用_网格进行self
plt.grid()
定义图绘制图(自):
lower_bound=self.lower_bound,如果self.lower_bound不是其他self。_compute_lower_bound()
上界=self.upper\u-bound,如果self.upper\u-bound不是其他self.\u compute\u upper\u-bound()
对于self.plots中的plot_数据:
平均值=绘图数据[“平均值”]
std=绘图数据[“std”]
分辨率=绘图数据[“分辨率”]
图例标签=绘图数据[“图例标签”]
自绘制图(下限、上限、平均值、标准、分辨率、图例标签)
定义绘图(自身、下限、上限、平均值、标准、分辨率、图例标签):
分辨率=分辨率或最大值(100,整数(上限-下限)*10)
图例标签=图例标签或“μ={},σ={}”。格式(平均值,标准)
X=np.linspace(下限、上限、分辨率)
距离X=自身分布(X,平均值,标准)
如果自填在下面:plt.fill在(X,dist_X,alpha=0.1)之间
plt.绘图(X,距离X,标签=图例标签)
定义计算下限(自):
返回np.min([plot[“mean”]-4*plot[“std”]用于自绘制中的绘制])
定义计算上限(自):
返回np.max([plot[“mean”]+4*plot[“std”]用于self.plot中的plot