如何使用 for 循环在一张图上计算和绘制多条线
How to use a for loop to calculate and plot multiple lines on one graph
我在编码方面相当缺乏经验,我需要帮助在一张图上绘制多条线。我正在使用 diffeq 求解器,需要为输入其他方程式的常数输入不同的值,并绘制常数的每个值的解(在这种情况下,我将从 6x10^3-6x10^8 看 Ha,改变每次 x10)。我将在下面粘贴我的一些代码,非常感谢任何帮助!
IEPOXg_i = 1*10**-9
IEPOXaq_i = 0
T = 280.0
Ptot = 1
R = 0.082057
V = 1
Rp = 100.0*10**(-7)
Dg = 0.1
k= 0
a = 0.1
Ma = 0.1191390
Daq = 10.0**-9
Wl = 1*10**-6
Ha = 6*10**3
q = Rp*((k/Daq)**0.5)
Raq = 0
w = ((8*R*T)/(3.1415*Ma))**0.5
Kmt = ((Rp**2/3/Dg)+(4*Rp/3/w/a))**(-1)
IEPOXg = IEPOXg_i*Ptot
IEPOXaq = ((Kmt*IEPOXg_i)/(((Kmt/Ha))+(3*(k**0.5)*(Daq**0.5)/Rp)))
y0 = [IEPOXg_i, IEPOXaq_i]
t = 3600 * np.arange(0, 24, 1)
def IEPOX_ODE(y, t, Kmt, Wl, Raq, Ha):
IEPOXg, IEPOXaq = y
dydt = [-(Kmt*Wl*IEPOXg) + ((1/Ha)*Kmt*IEPOXaq*Wl), ((Kmt*IEPOXg)/(R*T))-((Kmt*IEPOXaq)/(Ha*R*T))-(Q*Raq)]
return dydt
time_list = np.arange(0, 1, 0.01)
from scipy.integrate import odeint
sol1 = odeint(IEPOX_ODE, y0, time_list, args=(Kmt, Wl, Raq, Ha))
print(sol1)
plt.yscale("log")
plt.plot(sol1[:,0]/(T*(R*10**(-3))), label = 'IEPOXg') #IEPOXg/(T*R*0.001) = atm / k *
L*atm/k*mol * L/m3 = mol/m3
plt.plot(sol1[:,1]*Wl*1000, label = 'IEPOXaq')
plt.legend()
plt.title('')
plt.xlabel('')
plt.ylabel('')
你把积分和绘图放在一个循环中。
plt.yscale("log")
for Ha in np.logspace(3,6,4):
sol1 = odeint(IEPOX_ODE, y0, time_list, args=(Kmt, Wl, Raq, Ha))
# print(sol1)
plt.plot(sol1[:,0]/(T*(R*10**(-3))), label = 'IEPOXg Ha=%.2g'%Ha)
# IEPOXg/(T*R*0.001) = atm / k * L*atm/k*mol * L/m3 = mol/m3
plt.plot(sol1[:,1]*Wl*1000, label = 'IEPOXaq Ha=%.2g'%Ha)
plt.legend()
还要探索 plt.subplots
命令,将不同的图表分配到不同的地块,并根据它们自己对坐标轴的调整进行调整。
我在编码方面相当缺乏经验,我需要帮助在一张图上绘制多条线。我正在使用 diffeq 求解器,需要为输入其他方程式的常数输入不同的值,并绘制常数的每个值的解(在这种情况下,我将从 6x10^3-6x10^8 看 Ha,改变每次 x10)。我将在下面粘贴我的一些代码,非常感谢任何帮助!
IEPOXg_i = 1*10**-9
IEPOXaq_i = 0
T = 280.0
Ptot = 1
R = 0.082057
V = 1
Rp = 100.0*10**(-7)
Dg = 0.1
k= 0
a = 0.1
Ma = 0.1191390
Daq = 10.0**-9
Wl = 1*10**-6
Ha = 6*10**3
q = Rp*((k/Daq)**0.5)
Raq = 0
w = ((8*R*T)/(3.1415*Ma))**0.5
Kmt = ((Rp**2/3/Dg)+(4*Rp/3/w/a))**(-1)
IEPOXg = IEPOXg_i*Ptot
IEPOXaq = ((Kmt*IEPOXg_i)/(((Kmt/Ha))+(3*(k**0.5)*(Daq**0.5)/Rp)))
y0 = [IEPOXg_i, IEPOXaq_i]
t = 3600 * np.arange(0, 24, 1)
def IEPOX_ODE(y, t, Kmt, Wl, Raq, Ha):
IEPOXg, IEPOXaq = y
dydt = [-(Kmt*Wl*IEPOXg) + ((1/Ha)*Kmt*IEPOXaq*Wl), ((Kmt*IEPOXg)/(R*T))-((Kmt*IEPOXaq)/(Ha*R*T))-(Q*Raq)]
return dydt
time_list = np.arange(0, 1, 0.01)
from scipy.integrate import odeint
sol1 = odeint(IEPOX_ODE, y0, time_list, args=(Kmt, Wl, Raq, Ha))
print(sol1)
plt.yscale("log")
plt.plot(sol1[:,0]/(T*(R*10**(-3))), label = 'IEPOXg') #IEPOXg/(T*R*0.001) = atm / k *
L*atm/k*mol * L/m3 = mol/m3
plt.plot(sol1[:,1]*Wl*1000, label = 'IEPOXaq')
plt.legend()
plt.title('')
plt.xlabel('')
plt.ylabel('')
你把积分和绘图放在一个循环中。
plt.yscale("log")
for Ha in np.logspace(3,6,4):
sol1 = odeint(IEPOX_ODE, y0, time_list, args=(Kmt, Wl, Raq, Ha))
# print(sol1)
plt.plot(sol1[:,0]/(T*(R*10**(-3))), label = 'IEPOXg Ha=%.2g'%Ha)
# IEPOXg/(T*R*0.001) = atm / k * L*atm/k*mol * L/m3 = mol/m3
plt.plot(sol1[:,1]*Wl*1000, label = 'IEPOXaq Ha=%.2g'%Ha)
plt.legend()
还要探索 plt.subplots
命令,将不同的图表分配到不同的地块,并根据它们自己对坐标轴的调整进行调整。