Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在python中得到了一个数据集的两个图_Python_Arrays_Numpy_Matplotlib - Fatal编程技术网

我在python中得到了一个数据集的两个图

我在python中得到了一个数据集的两个图,python,arrays,numpy,matplotlib,Python,Arrays,Numpy,Matplotlib,我正在学习马克·纽曼的《计算物理》一书中题为“Euler方法”的例子8.1。我用Numpy数组重写了这个示例,但是当我绘制它时,我在同一个图上得到了两个图,不知道如何更正它。还有更好的方法将我的2 1D数组转换为1 2D数组,以便在Matplotlib中打印,谢谢 纽曼的例子: from math import sin from numpy import arange from pylab import plot,xlabel,ylabel,show def f(x,t): retur

我正在学习马克·纽曼的《计算物理》一书中题为“Euler方法”的例子8.1。我用Numpy数组重写了这个示例,但是当我绘制它时,我在同一个图上得到了两个图,不知道如何更正它。还有更好的方法将我的2 1D数组转换为1 2D数组,以便在Matplotlib中打印,谢谢

纽曼的例子:

from math import sin
from numpy import arange
from pylab import plot,xlabel,ylabel,show

def f(x,t):
    return -x**3 + sin(t)

a = 0.0           # Start of the interval
b = 10.0          # End of the interval
N = 1000          # Number of steps
h = (b-a)/N       # Size of a single step
x = 0.0           # Initial condition

tpoints = arange(a,b,h)
xpoints = []
for t in tpoints:
    xpoints.append(x)
    x += h*f(x,t)

plot(tpoints,xpoints)
xlabel("t")
ylabel("x(t)")
show()
我的修改:

from pylab import plot,show,xlabel,ylabel
from numpy import linspace,exp,sin,zeros,vstack,column_stack


def f(x,t):
    return (-x**(3) + sin(t))

def Euler(f,x0,a,b):
    N=1000    
    h = (b-a)/N
    t = linspace(a,b,N)
    x = zeros(N,float)
    y = x0
    for i in range(N):
        x[i] = y
        y += h*f(x[i],t[i])

    return column_stack((t,x)) #vstack((t,x)).T


plot(Euler(f,0.0,0.0,10.0))
xlabel("t")
ylabel("x(t)")
show()

得到两行的原因是,
t
以及
x
是根据它们的索引绘制的,而不是根据
t
绘制的
x

我不明白你为什么要堆叠这两个数组。只需将它们分开,这也将解决两个地块的问题

下面的操作很好

import numpy as np
import matplotlib.pyplot as plt
f = lambda x,t: -x**3 + np.sin(t)

def Euler(f,x0,a,b):
    N=1000    
    h = (b-a)/N
    t = np.linspace(a,b,N)
    x = np.zeros(N,float)
    y = x0
    for i in range(N):
        x[i] = y
        y += h*f(x[i],t[i])

    return t,x

t,x = Euler(f,0.0,0.0,10.0)
plt.plot(t,x)
plt.xlabel("t")
plt.ylabel("x(t)")
plt.show()

我想你的第一个问题是,你需要以某种方式清理情节空间。我对Pyplot不太了解,但在Matplotlib中有一个
plt.clf()
@Henry刚刚尝试过,虽然它有帮助,但由于某种原因,主线性图仍然显示出来,它似乎从中获取一个数据集并绘制两个图。啊,对不起,兄弟。没有pyplot的经验@亨利,这一切都很好,清理确实有助于解决另一个问题,我有plots@Henry
pyplot
plt
如果您
import
ed
matplotlib.pyplot作为plt
。另外,
pylab
is只是
pyplot
的一个不同名称空间。