我做了animation of a wave,但顏色條不斷移動,我不知道爲什麼。我認爲這是因爲它在每幀之後都會正常化。如何設置顏色表設置,使顏色條保持不變?Python Matplotlib彩條/顏色地圖設置
代碼:警告:此prgramm刪除它所在的目錄中的文件夾png3D。根據您的計算能力,所有框架也可能需要一段時間。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import time
import sys,os,shutil
time.clock()
def FUNCTION(p,r,t):
k_0,dx,c = p
x,y = r
x,y = np.meshgrid(x,y)
r = np.sqrt(x**2 + y**2)
z = np.exp(1j*(k_0[0]*x+k_0[1]*y-c*t))*np.exp(-((r-c*t)/(2*dx))**2)*0.5**(r/x[0][-1]/2)
z = abs(z)
return(x,y,z)
def PRINT_PNG(x,y,t,folder):
x,y,z = FUNCTION(p,r,t)
fig = plt.figure()
sub = fig.gca(projection='3d')
fig.suptitle("3D Wavepackage", size="large")
sub.set_zlim([0,1.5])
sub.set_xlabel("x",size="large")
sub.set_ylabel("y",size="large")
sub.set_zlabel("$Re[\psi(x,t)]$",size="large",ha="right")
sub.text(0.5,0.5,0.5,"t = "+str("%3.1f"%t)+" s",transform = sub.transAxes, ha="right")
surf = sub.plot_surface(x,y,z,linewidth=0,cmap=cm.coolwarm)
fig.colorbar(surf, shrink=0.5, aspect=5)
file_name = os.path.abspath(folder+"/tmp"+str("%04d"%i)+".png")
fig.savefig(file_name)
plt.close()
# Parameters
T = 10
N = 100
n = 24*T # 24 Frames pro Sekunde
t = np.linspace(0,T,n)
k_0 = [1,1]
dx = 1
c = 1
p = [k_0,dx,c]
x = np.linspace(-c*T,c*T,N)
y = np.linspace(-c*T,c*T,N)
r=[x,y]
# Baue Ordner
folder = os.path.abspath("png3D")
if os.path.exists(folder)==True:
shutil.rmtree(folder)
os.makedirs(folder)
else:
os.makedirs(folder)
for i in range(n):
PRINT_PNG(x,y,t[i],folder)
print(str(i+1)+"/"+str(n))
file_name = os.path.abspath("png3D//tmp%04d.png")
os.system("ffmpeg -f image2 -y -i "+file_name+" -r 24 -bit_rate 1800 3D_Wave.mpeg")
shutil.rmtree(folder)
print(time.clock())
儘管我鼓掌給出示例代碼,但最好將代碼簡化爲:a)快速運行,b)不要使用本地文件。 – tacaswell
我看不出有什麼辦法可以做到這一點。我嘗試使用matplotlib的動畫模塊,但它部分不能用於Python 3.3,不支持一些3D繪圖(看起來)。因此,如果沒有電影或動畫,我該如何簡單地將代碼先保存爲電影圖像? – throwaway17434