7
我已經從一個文件創建了一個3D繪圖曲面,並且我正在試圖爲這個繪圖設置動畫。 我已經閱讀了matplotlib網頁中的示例和其他示例,並注意到我需要創建一個更新函數來遍歷文件中的值,然後創建一個對象,但我不明白該怎麼做。如何動畫matplotlib中的3d plot_surface
如果有人能向我解釋更新函數的語法以及如何在matplotlib.animation
對象中使用它,我將非常感激。
我的數據是一個具有498行的多維數組,每行我有一個64x128值的數組。數據的組織方式如下:
數據是來自力盤的時間序列,500行中的每一行都是一幀,這意味着該試驗持續10秒。對於每一幀我有另一個64x128值的數組。
這是我的代碼至今:
from mpl_toolkits.mplot3d import *
import matplotlib.pyplot as plt
import numpy as np
from random import random, seed
from matplotlib import cm
from mpl_toolkits.mplot3d import axes3d
import matplotlib.animation as animation
source_path = "c:\\Projecto\\"
destination_path = "c:\\Projecto\\EntirePlate\\"
#fid = np.loadtxt(source_path + "rolloff_xls.txt",dtype=str)
fid_MP = open(source_path + "101mp - Entire plate roll off.xls","Ur")
lines_MP = fid_MP.readlines()
fid_MP.close()
values_MP = []
for i in lines_MP:
if i[0].isdigit():
values_MP.append(i)
values = np.loadtxt(values_MP,dtype=float)
new_values_MP =[]
for i in range(0,(len(values_MP)/64)):
for j in range(0,64):
new_values_MP.append([[i],[j],values[j]])
new_values_MP = np.asarray(new_values_MP)
fig = plt.figure()
ax = fig.gca(projection='3d') # to work in 3d
plt.hold(True)
x_surf = np.arange(0,128) # generate a mesh
y_surf = np.arange(0,64)
x_surf, y_surf = np.meshgrid(x_surf, y_surf)
z_surf = []
for i in range(0,64):
# print(new_values[i])
z_surf.append(np.asarray(new_values_MP[i][2])) # ex. function, which depends on x and y
z_surf = np.asarray(z_surf).reshape([64,128])
ax.plot_surface(x_surf, y_surf, z_surf, rstride=2, cstride=2 ,cmap=cm.jet) # plot a 3d surface plot
ax.set_xlabel('Medio Lateral - Axis')
ax.set_ylabel('Anterior Posterior - Axis')
ax.set_zlabel('Pressure (P)')
def update(x_values, y_values, z_values):
for i in range(0,len(values_MP)/64):
x_surf = x_values
y_surf = y_values
z_surf.set_data(new_values_MP[i,2])
return z_surf
ani = animation.FuncAnimation(fig, update, frames=xrange(len(values_MP)/64),
interval=50, blit=False)
plt.show()