簡體   English   中英

如何在Python中繪制這樣的圖形?

[英]How can I plot a graph like this one in Python?

我想繪制一個圖形,如下圖所示: two muppets

我編寫了以下代碼,為每個時間步繪制了波形圖。

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()

如何將這些圖片連接在一起並獲得圖片中的圖形? 有標准的方法嗎?

不要關閉圖並在一張圖像上全部繪制。

每個圖都需要一些Y值的偏移量

u += count  # offset 

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")

圖片:

在此處輸入圖片說明


編輯: 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM