我的程序正在使用Euler方法在同一平面上的时间间隔[0,30]上绘制()的图形以及ℎ= 1,0.5,0.1的近似值ℎ()。但是,我是python的新手,我不知道如何将所有图形放在一个平面上。
import numpy as np
import matplotlib.pylab as plt
def Eulergraph(h,N):
K = 12; r = 0.43; Po = 1;
我需要一个平面中的所有图形,而不是三个图形。
答案 0 :(得分:0)
您可以将轴对象(以下称为ax
)传递给Eulergraph
函数,然后只调用一次plt.show
:
import numpy as np
import matplotlib.pylab as plt
# your function
def Eulergraph(h, N, ax):
...
for n in range(N+1):
Pn = P[n] + h*f(P[n])
P = np.append(P,Pn)
# Note the change here
ax.plot ( n, P[n] , ' ro' )
# create your figure and axis object
fig = plt.figure()
ax = plt.gca()
# pass the axis object as a parameter
Eulergraph(1,30,ax)
Eulergraph(.5,30,ax)
Eulergraph(.1,30,ax)
# formatting of your plot
plt.xlabel (' Value of n ”' )
plt.ylabel (" Value of p[n] ”")
plt.title (" Approximate Solution with Euler’s Method " )
plt.show()
请注意,您也可以不在函数中调用plt.show()
,这样会产生所需的效果。但是,我建议编写该函数以接受轴参数,因为您可以在以后选择将图分离到不同的图上。
显示图形。当以pylab模式在ipython中运行时,显示所有图形并返回到ipython提示符。
一个小例子表明,您可以在同一图形上绘制两条线:
exp1.py:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y1 = np.arange(10)*2-1
y2 = np.arange(10)*1+1
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()
但是,将脚本更改为两次调用plt.show
将导致两个单独的图,例如,
plt.plot(x,y1)
plt.show()
plt.plot(x,y2)
plt.show()
plt.show()
函数显示图形(已将所有图形定义到该时间点),然后其他图形将创建新图形。