Вы можете передать объект оси (называемый 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()
в вашей функции, и это будет иметь желаемый эффект. Однако я бы рекомендовал написать функцию для принятия аргумента оси, поскольку на более позднем этапе вы можете выбрать разделение графиков на разные графики.
Из документов для plt.show :
Показать фигуру. При работе в ipython с режимом pylab отобразите все цифры и вернитесь к приглашению 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()
Запуск exp1.py
дает желаемый эффект одной фигуры с обеими линиями:
Однако, если дважды изменить скрипт на вызов plt.show
, то получится два отдельных графика, например,
plt.plot(x,y1)
plt.show()
plt.plot(x,y2)
plt.show()
Функция plt.show()
отображает фигуру (со всеми графиками, определенными к этому моменту времени), и последующие графики будут создавать новые фигуры.