python - 如何绘制随时间变化的图,每次都使用相同颜色的不同深浅

标签 python matplotlib plot

所以基本上我有一个图表,每 10 个时间步绘制出我的代码的解决方案,但我意识到不可能分辨哪个时间是哪个步骤,除非您已经知道它应该是什么样子。所以我的想法是每次 B 为不同的蓝色,M 为红色,每个时间步长逐渐变暗 - 有人知道我该怎么做吗?谢谢!

import numpy as np 
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import random
from math import sqrt
%matplotlib inline

r1=0.1 # growth rate B
r2=0.3 # growth rate M
KB=20 # carrying capacity B
x=np.arange(0,70) # position
dx=1 # distance step
m=71 # number of distance steps
alpha =  0.00002 # predation rate of M on B
beta=0 # growth rate M from eating B
KM=71*[] # carrying capacity M
KM[0:71]=4000+(4000/2)*(1+np.cos(np.pi*x/35))
n=101 # years
dt=1 # time step

B=np.zeros(shape=(m,n)) # B
M=np.zeros(shape=(m,n)) # M
D=0.35 # diffusivity of B
D2=0.05 # diffusivity of M
Alpha=(D*dt)/(dx*dx) # diffusion term for the B
Alpha2=(D2*dt)/(dx*dx) # diffusion term for the M

M[0,0]=0
M[m-1,0]=0
B[1:m-1,0]=5
M[1:26,0]=2500
M[26:44,0]=1000 # initial conditions
M[44:m-1,0]=2500
for k in range(0,n-1):
    B[0,k+1]=B[1,k+1]
    B[m-1,k+1]=B[m-2,k+1] # boundary conditions
    M[0,k+1]=0
    M[m-1,k+1]=0
    for i in range(1,m-1):
        B[i,k+1]=(1-2*Alpha)*B[i,k]+Alpha*B[i+1,k]+Alpha*B[i-1,k]+r1*B[i,k]*(1-B[i,k]/KB)-alpha*M[i,k]*B[i,k] # 
        M[i,k+1]=(1-2*Alpha2)*M[i,k]+Alpha2*M[i+1,k]+Alpha2*M[i-1,k]+r2*M[i,k]*(1-M[i,k]/KM[i])+beta*M[i,k]*B[i,k]
    if (k+1) % 10 == 0 or k==0:
        plt.plot(B[:,k],color='b') 
        plt.plot(M[:,k]/1000,color='r')

plt.xlabel('Position')
plt.ylabel('Density per 10 ha')
plt.title('Distributions of the B and M population every 10 years \n - with equilibrium distribution of B')
speciesM = mpatches.Patch(color='r', label='M (1000)')
speciesB = mpatches.Patch(color='b', label='B')
plt.legend(handles=[speciesM,speciesB])

enter image description here

最佳答案

你可以这样做:

colors = {
    'blues':plt.cm.Blues(np.linspace(0.1,1,B.shape[0])),
    'reds':plt.cm.Reds(np.linspace(0.1,1,M.shape[0]))
}

fig,ax = plt.subplots()
for k in range(B.shape[0]):
    ax.plot(B[:,k],color=colors['blues'][k])
    ax.plot(M[:,k]/1000,color=colors['reds'][k])

这将返回这个数字: Figure

如果您需要颜色引用,您可以创建两个颜色条(每个图)。

关于python - 如何绘制随时间变化的图,每次都使用相同颜色的不同深浅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766436/

相关文章:

python - ts.plot() 和 dataFrame.plot() 抛出错误 : "NameError: name ' _converter' is not defined"

python - Google Mirror API 抛出 BadStatusLine 异常(Python)

python - ImportError : No module named PyQt4. QtCore

python - 将一些 python 脚本打包为 Linux 的可执行文件

python - pandas_ml 更改混淆矩阵图像大小

r - 为大型数据集加速 plot() 函数

python - Scipy interp1d 和无穷大

python - 如何在同一张图中绘制两个列表,但颜色不同?

MATLAB - 使用全等 RNG 在圆圈中绘制随机点

r - 在 rmarkdown 中增加地 block 之间的空间