jupyter notebookにて
下記のコードで1つの点を指定した座標の通りに動くアニメーションの作成中です。
%matplotlib notebook %matplotlib nbagg from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import matplotlib.animation as animation from IPython.display import HTML import numpy as np def init(): ax.set_xlim(-10,10) ax.set_ylim(-10,10) ax.set_zlim(0,10) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("z") ax.set_aspect('equal') return lines x1,y1,z1 = [],[],[] x1=[1,8,3,6,3,6,4] y1=[9,1,5,3,7,3,8] z1=[0,2,5,7,1,0,5] def update_lines(num, data, lines,points): for dat,line, point in zip(data,lines, points): point.set_data(dat[0:2, num]) point.set_3d_properties(dat[2, num]) return lines # Attaching 3D axis to the figure fig = plt.figure() ax = fig.gca(projection='3d') # Lines to plot in 3D t = np.linspace(-3, 2, 30) z = np.linspace(-3, 2, 30) r = np.linspace(-3, 2, 30) x1, y1, z1 = x1, y1, z1#プロットするデータ data = np.array([[x1,y1,z1]])#プロットするデータ points = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data] line_ani = animation.FuncAnimation(fig, update_lines, 300, fargs=(data, lines, points), interval=10, init_func=init, blit=True, repeat=True)
一度は思い通りに動いたのですが
再度notebookを起動すると以下のエラーが発生してしまい、
スタートの地点から動かなくなってしまいました。
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-10-16e17015c295> in <module> 44 points = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data] 45 ---> 46 line_ani = animation.FuncAnimation(fig, update_lines, 300, fargs=(data, lines, points), 47 interval=10, init_func=init, blit=True, repeat=True) 48 NameError: name 'lines' is not defined
解決を試みるために該当箇所のlinesを消す等の処置を行いましたが
全く動きませんでした。
解決手段をご教授願いたいです。
linspace等の数字は無意図的に動かしたら動いたというものなので
正しい設定ではないかと思っています。
また、このコードのx1,y1,z1の部分を
x2,y2,z2のようにコピペで増やしていけば同一の空間に2つ以上の点を動かすことが出来るようになるのでしょうか?
また、出来ないとしたらどのようにしたら解決するのかも教えていただきたいです。
よろしくお願いします。
2019年6月29日追記
%matplotlib notebook %matplotlib nbagg from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import matplotlib.animation as animation from IPython.display import HTML import numpy as np def init(): ax.set_xlim(-10,10) ax.set_ylim(-10,10) ax.set_zlim(0,10) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("z") ax.set_aspect('equal') return lines x1,y1,z1 = [],[],[] x1=[1,8,3,6,3,6,4] y1=[9,1,5,3,7,3,8] z1=[0,2,5,7,1,0,5] def update_lines(num, data, lines,points): for dat,line, point in zip(data,lines, points): point.set_data(dat[0:2, num]) point.set_3d_properties(dat[2, num]) return lines # Attaching 3D axis to the figure fig = plt.figure() ax = fig.gca(projection='3d') # Lines to plot in 3D t = np.linspace(-3, 2, 30) z = np.linspace(-3, 2, 30) r = np.linspace(-3, 2, 30) x1, y1, z1 = x1, y1, z1#プロットするデータ data = np.array([[x1,y1,z1]])#プロットするデータ ※lines=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1] )[0] for dat in data]※ points=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data] line_ani = animation.FuncAnimation(fig, update_lines, 300, fargs=(data, lines,points), interval=10, init_func=init, blit=True, repeat=True)
※この印が訂正点です※
以上のコードで動かないという問題点は解決いたしました。
しかし、複数のコードを動かすために以下のようなコードを組んだのですが
x2,y2,z2,の座標の点しか現れませんでした。
解決策の知恵をお貸し願いたいです。
%matplotlib notebook %matplotlib nbagg from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import matplotlib.animation as animation from IPython.display import HTML import numpy as np def init(): ax.set_xlim(-10,10) ax.set_ylim(-10,10) ax.set_zlim(0,10) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("z") ax.set_aspect('equal') return lines x1,y1,z1 = [],[],[] x2,y2,z2 = [],[],[] x1=[1,8,3,6,3,6,4] y1=[9,1,5,3,7,3,8] z1=[0,2,5,7,1,0,5] x2=[-1,-8,3-,-6,-3,-6,-4] y2=[-9,-1,-5,-3,-7,-3,-8] z2=[1,3,1,2,4,2,4] def update_lines(num, data, lines,points): for dat,line, point in zip(data,lines, points): point.set_data(dat[0:2, num+1]) point.set_3d_properties(dat[2, num+1]) return lines # Attaching 3D axis to the figure fig = plt.figure() ax = fig.gca(projection='3d') # Lines to plot in 3D t = np.linspace(-3, 2, 30) z = np.linspace(-3, 2, 30) r = np.linspace(-3, 2, 30) x1, y1, z1 = x1, y1, z1#プロットするデータ data = np.array([[x1,y1,z1]])#プロットするデータ x2, y2, z2 = x2, y2, z2#プロットするデータ data = np.array([[x2,y2,z2]])#プロットするデータ lines=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1] )[0] for dat in data] points=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data] line_ani = animation.FuncAnimation(fig, update_lines, 300, fargs=(data,lines, points), interval=10, init_func=init, blit=True, repeat=True)
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー