首页 > 解决方案 > 如何将所有图表放在一个平面上

问题描述

我的程序使用欧拉方法在同一平面上绘制时间间隔 [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;

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

标签: pythonnumpymatplotlib

解决方案


您可以将轴对象(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()函数显示图形(所有图形都定义到该时间点),然后进一步的图形将创建新图形。


推荐阅读