如何在二维布朗运动仿真中直观地表示时间演化

时间:2019-07-01 19:46:01

标签: python matplotlib data-visualization

我已经将x和y方向的布朗运动建模为随机游动。我已经在二维绘图上绘制了数据,但是虽然从原点开始追踪模拟粒子的路径并不那么困难,但我希望能够看到图形上直观表示的粒子路径的时间演变,无论是通过随时间改变线条的颜色,还是在绘图中添加第三维来表示时间,或者使用某种动态图形类型。

我没有尝试实现任何东西,但是我尝试着看看有什么可用的选项。如果可能的话,我想避免使用3D图。话虽如此,但在这种情况下,我愿意使用除matplotlib之外的其他方式(例如pyqtgraph)。

这是我的代码:

import random
import numpy as np
import matplotlib.pyplot as plt
#n is how many trajectory evaluations
n = 1000
t= np.linspace(0,10000,num=n)
def brownianMotion(time):
    B = [0]
    for t in range(len(time)-1):
        nrand = random.gauss(0,(time[t+1] - time[t])**.5)
        B.append(B[t]+nrand)
    return B
xpath = brownianMotion(t)
ypath = brownianMotion(t)

def plot(x,y):
    plt.figure()
    xplot = np.insert(x,0,0)
    yplot = np.insert(y,0,0)
    plt.plot(xplot,yplot,'go-',lw=1,ms=.1)
             #np.arange(0,n+1),'go-', lw=1, ms = .1)
    plt.xlim([-150,150])
    plt.ylim([-150,150])
    plt.title('Brownian Motion')
    plt.xlabel('xDisplacement')
    plt.ylabel('yDisplacement')
    plt.show()
plot(xpath,ypath)

总而言之,这只是出于娱乐,而我在工作中很无聊。欢迎所有建议!谢谢您的时间!

请让我知道我是否应该发布代码输出的图片。

编辑:此外,如果我想在同一张图中表示多个粒子,我该怎么做,以便区分多个路径?我为此修改了我的代码,如下所示,但是目前此代码输出的是绿色的混乱粒子混合物。

import random
import numpy as np
import matplotlib.pyplot as plt

nparticles = 20
#n is how many trajectory evaluations
n = 100
t= np.linspace(0,1000,num=n)
def brownianMotion(time):
    B = [0]
    for t in range(len(time)-1):
        nrand = random.gauss(0,(time[t+1] - time[t])**.5)
        B.append(B[t]+nrand)
    return B
xs = []
ys = []
for i in range(nparticles):
    xs.append(brownianMotion(t))
    ys.append(brownianMotion(t))
#xpath = brownianMotion(t)
#ypath = brownianMotion(t)
def plot(x,y):
    plt.figure()
    for xpath, ypath in zip(x,y):
        xplot = np.insert(xpath,0,0)
        yplot = np.insert(ypath,0,0)
        plt.plot(xplot,yplot,'go-',lw=1,ms=.1)
             #np.arange(0,n+1),'go-', lw=1, ms = .1)
    plt.xlim([np.amin(x),np.amax(x)])
    plt.ylim([np.amin(y),np.amax(y)])
    plt.title('Brownian Motion')
    plt.xlabel('xDisplacement')
    plt.ylabel('yDisplacement')
    plt.show()
plot(xs,ys)

0 个答案:

没有答案