Построение вложенных участков из вложенных для l oop in Python - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь построить линейные графики (Drifted brownian motion) для различных значений mu и sigma, у меня есть функция, которая выполняет итерацию списка возможных значений mu и возможных значений sigma, и она должна затем возвращать полученные графики. Проблема в том, что я не уверен, как заставить subplots возвращать необходимое количество строк. Я дал правильные значения nrows и ncols, но проблема связана с индексацией. У кого-нибудь есть хитрость, чтобы решить это?

Я предоставил код и сообщение об ошибке ниже,

# Drifted BM for varying values mu and sigma respectively

def DriftedBMTest2(nTraj=50,T=5.0,dt=0.01,n=5, sigma = [0.1,1.0,2], mulist=[0,0.5,1,1.5], ValFSize=(18,14)):

    nMu = len(mulist)
    nSigma = len(mulist)
    # Discretize, dt =  time step = $t_{j+1}- t_{j}$
    dt = T/(n-1)

    # Loop on different value sigma
    for z in range(nSigma): 
        # Loop on different value Mu
        for k in range(nMu):

            n=int(T/dt)
            x=np.zeros(n+1,float)

            # Create plot space 
            temp = nSigma*nMu/2
            plt.subplot(temp,2,k+1)
            plt.title("Drifted BM $\sigma$={}, $\mu$={}".format(sigma[z],mulist[k])) 
            plt.xlabel(r'$t$')
            plt.ylabel(r'$W_t$');

            # Container for colours for each trajectory
            colors = plt.cm.jet(np.linspace(0,1,nTraj))
            # Generate many trajectories
            for j in range(nTraj):

                # Time simulation
                # Add the time * constant(mu)
                for i in range(n):
                    x[i+1]=x[i]+np.sqrt(dt)*np.random.randn() + i*mulist[k]

                # Scale Each Tradjectory
                x = x * sigma[z]
                # Plot trajectory just computed
                plt.plot(np.linspace(0,T,n+1),x,'b-',alpha=0.3, color=colors[j], lw=3.0)

DriftedBMTest2( sigma = [1,2], mulist=[-2,1] )

Затем я получаю первые два графика, но не все из них, и ошибка ниже.

enter image description here

MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.

Извините, если это плохой вопрос, я новичок в Python, но любая помощь будет признательна.

1 Ответ

1 голос
/ 12 апреля 2020

Попробуйте добавить fig = plt.figure() между двумя циклами for

for z in range(nSigma): 
    # Loop on different value Mu
    fig = plt.figure()   # <---- Line added here
    for k in range(nMu):

Если это не дает желаемого макета, вы можете попробовать переместить его во внутреннюю часть для l oop как

for z in range(nSigma): 
    # Loop on different value Mu
    for k in range(nMu):
        fig = plt.figure()  # <---- Line added here
...