如何在 Python 中绘制这样的图表?

San*_*tos 1 python matplotlib

我想绘制一个如下图所示的图表: 两个布偶

我编写了以下代码,为每个时间步绘制了波形图。

import matplotlib.pyplot as plt
import numpy as np

def u_0(x):
    a = 1.0/np.cosh(2.0*(x+8.0))
    b = 1.0/np.cosh((x+1.0))
    return 8.0*a*a+2.0*b*b

#spatial grid
N = 100
x = np.linspace(-10,10,N)

#time
Nt = 100
tlist = np.linspace(0.0,2.0,Nt)

#velocity
c = 5.0
count = 0
for t in tlist:
  u = u_0(x-c*t)
  plt.figure()
  plt.plot(x,u)
  plt.savefig(str(count))
  count = count+1
  plt.close()
Run Code Online (Sandbox Code Playgroud)

如何将这些图片连接在一起并得到如图所示的图表?有没有标准的方法来做到这一点?

fur*_*ras 5

不要关闭绘图并将所有内容绘制在一张图像上。

每个图都需要一些 Y 值偏移

u += count  # offset 
Run Code Online (Sandbox Code Playgroud)

代码

import matplotlib.pyplot as plt
import numpy as np

def u_0(x):
    a = 1.0/np.cosh(2.0*(x+8.0))
    b = 1.0/np.cosh((x+1.0))
    return 8.0*a*a + 2.0*b*b

# spatial grid
N = 100
x = np.linspace(-10, 10, N)

# time
Nt = 100
tlist = np.linspace(0.0, 2.0, Nt)

#velocity
c = 5.0
count = 0

for t in tlist:
  u = u_0(x-c*t)
  u += count  # offset 
  plt.plot(x, u)
  count += 1

plt.savefig("result.png")
Run Code Online (Sandbox Code Playgroud)

图像:

在此输入图像描述


编辑: 3D 中类似的东西

在此输入图像描述

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # need for `projection=`
import numpy as np

def u_0(x):
    a = 1.0/np.cosh(2.0*(x+8.0))
    b = 1.0/np.cosh((x+1.0))
    return 8.0*a*a + 2.0*b*b

#velocity
c = 5.0

#spatial grid
N = 30
x = np.linspace(-10, 10, N)
t = np.linspace(0.0, 2.0, N)

X, T = np.meshgrid(x, t)
Y = u_0(X-c*T)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.plot_wireframe(X, T, Y)

plt.show()
plt.savefig('result.png')
Run Code Online (Sandbox Code Playgroud)