如何在我的python散点图上引入“拖尾”以表示散点图上每个值的不确定性?

时间:2019-03-27 13:02:51

标签: python probability distribution gaussian scatter

我编写了一些代码,将放射性衰变建模到检测器上,以进行多次重复试验。但是我被告知,x方向上的不确定性为0.01m,y方向上的不确定性为0.03m。因此,我编写了一个附加函数,为散点图上的每个点生成一个高斯分布-x坐标的高斯分布,平均值为x值和标准偏差为0.01,y方向也是如此。

但是我的麻烦是要解决如何在散点图上表示这一点。作业问题要求对绘图上的点分布进行“抹平”,所以也许我是否可以根据2D高斯对每个点的强度进行颜色编码?我不太确定该怎么做。谁能指出我正确的方向?

这是我的代码,可以正常工作,并且我相信生成拖尾的分辨率函数是正确的。我只是不知道如何在情节上显示它。

感谢您的时间

import numpy as np
import matplotlib.pyplot as plt
from math import acos
from scipy import random

def func(x):
    return acos(1-2*x)

def inversionmethod(N): 
    xgen=random.uniform(0,1,N) 

    x_req=[] 
    for i in range(len(xgen)): 
        xreq=func(xgen[i])
        x_req.append(xreq) 
    x_req=np.array(x_req) 
    return x_req 

def generatedata():
    N=1*10**5
  #  nbins=100000
    tau=550*10**-6
    vz=2000
    distance=tau*vz
    theta=inversionmethod(N)
    phi = 2*np.pi*np.random.random(N)
    theta -= np.pi/2
   #  phi=inversionmethod(N)
    dist=[]
    for i in range(0,N):
        s=np.random.exponential(scale=distance)
        dist.append(s)

    x=[]
    y=[]
    rx=[]
    ry=[]

    for i in range(0,N):
        if 2-dist[i]>0:

            xpos=(2-dist[i])*np.tan(phi[i])
            ypos= (2-dist[i])*np.tan(theta[i]) / np.cos(phi[i])
            x.append(xpos)
            y.append(ypos)
            res=resolution(xpos,ypos,0.1,0.3)
            rx.append(res[0])
            ry.append(res[1])
    plt.hist(rx,bins=100)
    plt.show()
    fig, ax= plt.subplots(figsize=(5,5))
    ax.set_xlim([-100,100])
    ax.set_ylim([-100,100])
    ax.plot(x, y, 'ko',markersize=0.2)

    plt.show()

    return 

def resolution(xvalue,yvalue,sdx,sdy):
    x_smeared=xvalue+np.random.normal(loc=xvalue,scale=0.01)
    y_smeared=yvalue+np.random.normal(loc=yvalue,scale=0.03)

    return x_smeared, y_smeared
print(generatedata())

0 个答案:

没有答案