Python绘制图形,不同区域设置不同颜色

时间:2019-03-13 15:32:35

标签: python matplotlib colors region

运行代码时,它返回一个空白图形。我不知道为什么我的代码这样做。当ml <0的颜色变为蓝色时,我还需要生成该图的图。当ml> 0的颜色更改为另一种颜色并且ml = 0时,将生成另一种颜色。我将在下面提供代码。如果有人可以帮忙,那会很好,因为我对python不太熟悉。

(ax1) = plt.subplots(1,1, figsize=(8,9),
                              sharex=True)

#initial conditions                        
d= 0.1
eps = 0.000001

#defining the equations as functions
#xnew equation
def f(a,b,x,y):
z = 1-b*y
r  = a*x*z*(1-x*z)
if r>eps:
    return r
else:
    return 0

#ynew equation
def g(b,d,x,y):
    r = (1-d)*y*(1+b*x)
    if r>eps:
        return r
    else:
    return 0

#Equation A
def A(a,b,x,y):
    return a*(1-2*x - b*y + 4*b*x*y - 2*b**2*x*y**2)
#Equation B  
def B(b,a,x,y):
    return a*b*x*(2*x - 1 - 2*b*x*y)
 #Equation C   
def C(b,d,x,y):
    return (1-d)*b*y
#Equation D
def D(b,d,x,y):
    return (1-d)*(1+b*x)
#Equation E, which is max lyapunov exponent equation formed from the parameters above  
def e(a,b,x,y,yn):
    return log((A(a,b,x,y)+(B(b,a,x,y)*yn))**2 +(C(a,b,x,y)+ 
    (D(b,d,x,y)*yn))**2 / (1 + yn**2))
#next ydash value calculated after the max lyapunov exponent is calculated
def yz(a,b,x,y,yn):
    return (C(b,d,x,y)+(D(b,d,x,y)*yn))/(A(a,b,x,y)+(B(b,a,x,y)*yn))    
#defining the function
def lyapunov():
    #initial conditions
    d=0.1
    b=0.4
    xold = 0.5
    yold = 0.01
    #looping values of a and b 0<a<5 and 0<b<6
    for i in range(100):
        a = 1+ 4*i/100
        xold = 0.5
        yold = 0.01
        ydash = 1
        yn=1

        for i in range(100):
            b = 1+ 5*i/100
            xold = 0.5
            yold = 0.01  
            ydash = 1
            yn=1
            #looping round x and y values
            for j in range(100):
                xnew=f(a,b,xold,yold)
                ynew=g(b,d,xold,yold)
                ydash =1 
                #the new value of xnew is xold same for y
                xold = xnew
                yold = ynew
                #setting ml =0 as it starts at 0. inital
                ml = 0
                yn=1
                #calculating the two equations and plotting ml against a and
     #b. Also, need to print out the max ml value along with x and y        
     #value in a text file.

                for k in range(100):
                    outfile = open('lyapunov.txt', 'w')
                    #finding sum of max lyapunov exponent then * by 0.5*N, in this case N is 100
                    ml = e(a,b,xold,yold,yn)
                    ml = ml + e(a,b,xold,yold,yn)
                    ml = (ml/100)*2 
                    #ydash equation
                    ydash = yz(a,b,xold,yold,yn)
                    #now setting xold and yold equal to the equations xnew,ynew were so it keeps looping around each time, xold is no longer 0.5. Keeps taking new values. Same with yold.
                    xold=f(a,b,xold,yold)
                    yold=g(b,d,xold,yold)
                    #writing to file

                   outfile.write(str(xold)+'\t'+str(yolf)+'\t'+str(ml)+'\n')
    #plotting a,ml and b,ml            
    ax1.plot(a, ml,',k')
    ax1.plot(b, ml, ',k')
    #closing the file
    outfile.close() 
#setting graph axis             
ax1.set_ylim(0, 5)        
ax1.set_xlim(0, 6) 
#title
ax1.set_title('Lyapunov Exponent')  

lyapunov()

0 个答案:

没有答案