如何将所有图形放在一个平面上

时间:2019-05-02 13:46:27

标签: python numpy matplotlib

我的程序正在使用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;

我需要一个平面中的所有图形,而不是三个图形。

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(),这样会产生所需的效果。但是,我建议编写该函数以接受轴参数,因为您可以在以后选择将图分离到不同的图上。


来自docs for 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()

运行exp1.py具有两行同时显示一个图形的预期效果: enter image description here

但是,将脚本更改为两次调用plt.show将导致两个单独的图,例如,

plt.plot(x,y1)
plt.show()
plt.plot(x,y2)
plt.show()

plt.show()函数显示图形(已将所有图形定义到该时间点),然后其他图形将创建新图形。