Как ввести «размытие» в мой график рассеяния Python, чтобы представить неопределенность в каждом значении на графике рассеяния? - PullRequest
0 голосов
/ 27 марта 2019

Я написал некоторый код, который моделирует радиоактивный распад на детекторе для многих повторных испытаний.Но мне сказали, что есть неопределенность в направлении х 0,01 м, а в у 0,03 м.Итак, я написал дополнительную функцию, которая генерирует гауссово распределение для каждой точки на диаграмме рассеяния - гауссиан для координаты x, которая имеет среднее значение x и стандартное отклонение 0,01, и аналогично для направления y.

Однако моя проблема в том, чтобы решить, как представить это на графике рассеяния.Вопрос о домашнем задании требует «размазывания» распределения точек на графике, так что, может быть, я смогу покрасить интенсивность каждой точки как функцию двумерного гауссиана?Я не слишком уверен, как идти об этом, хотя.Может ли кто-нибудь указать мне правильное направление?

Вот мой код, который прекрасно работает, и я считаю, что функция разрешения, которая генерирует размытие, является правильной.Я просто не знаю, как отобразить это на графике.

Спасибо за ваше время

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())
...