質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

475閲覧

ArtistAnimationの出力がフレーム毎に分割されて出力される

kbox

総合スコア1

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/05/06 16:58

Axes3Dで作成したグラフをArtistAnimationで動かしたいのですが、現在のコードではうまくアニメーションが出力されません。
コードを実行すると、画像のような各フレームのグラフが100個のウィンドウとして個別に出力されてしまいます。
イメージ説明

ソースコード

Python

1import numpy as np 2import matplotlib.pyplot as plt 3from mpl_toolkits.mplot3d import Axes3D 4from matplotlib.animation import ArtistAnimation 5 6N=100 7frames = [] 8for i in range(N): 9 # (x,y)データを作成 10 a1= np.loadtxt("4000rpm_wUV_6,52-heimen.csv", delimiter=",", usecols=(0) ) 11 a= a1[i] 12 b1= np.loadtxt("4000rpm_wUV_6,52-heimen.csv", delimiter=",", usecols=(1) ) 13 b= b1[i] 14 c1= np.loadtxt("4000rpm_wUV_6,52-heimen.csv", delimiter=",", usecols=(2) ) 15 c= c1[i] 16 h1= np.loadtxt("4000rpm_wUV_6,52-heimen.csv", delimiter=",", usecols=(3) ) 17 h= h1[i] 18 19 #x,yの範囲 20 x = np.linspace(-45, 45, 10) 21 y = np.linspace(-45, 45, 10) 22 23 # 格子点を作成 24 X, Y = np.meshgrid(x, y) 25 # Zの作成 26 Z = (h-a*X-b*Y)/c 27 28 # 3Dでプロット 29 fig = plt.figure() 30 ax = Axes3D(fig) 31 32 ax.set_xlim([-45,45]) 33 ax.set_ylim([-45,45]) 34 ax.set_zlim([-45,45]) 35 36 # 軸ラベル 37 ax.set_xlabel("X軸: 中心からの距離[mm]", fontsize = 16, fontname="MS Gothic") 38 ax.set_ylabel("Y軸: 中心からの距離[mm]", fontsize = 16, fontname="MS Gothic") 39 ax.set_zlabel("Z軸: 変位[μm]", fontsize = 16, fontname="MS Gothic") 40 41 frame = ax.plot_surface(X, Y, Z, color="tomato",antialiased=False, alpha=0.3) 42 frames.append(frame) 43 44ani = ArtistAnimation(fig, frames, interval=100) 45 46# 描画 47plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2023/05/08 02:05

> # 3Dでプロット fig = plt.figure() ax = Axes3D(fig) を「for i in range(N):」よりも前に移して、 frames.append(frame) ↓ 修正 frames.append([frame]) で、どうでしょうか?
jbpb0

2023/05/08 02:14

質問内容とは関係ありませんが、下記の行は変数「i」と「Z」に関係しないので、「for i in range(N):」のループ内で毎回同じことをやってますよね 同じことを何回もやるのは時間のムダなので、それらは「for i in range(N):」よりも前に移した方がいいですよ ・「np.loadtxt」の行 ・「#x,yの範囲」の下 ・「# 格子点を作成」の下 ・「ax.set_*lim」の行 ・「# 軸ラベル」の下
kbox

2023/05/08 02:20

コメントしていただきありがとうございます。 FuncAnimationを使用して目的のアニメーションが得られましたので、今後ArtistAnimationを使用する際の参考にさせていただきます。
guest

回答1

0

自己解決

FuncAnimationを使用したプログラムに変更したところ、無事動作しました。

ソースコード

Python

1import numpy as np 2import matplotlib.pyplot as plt 3from mpl_toolkits.mplot3d import Axes3D 4import matplotlib.animation as animation 5 6fig = plt.figure(dpi=150) 7ax = fig.add_subplot(projection='3d') 8 9ax.set_xlim([-45,45]) 10ax.set_ylim([-45,45]) 11ax.set_zlim([-45,45]) 12 13# 軸ラベル 14ax.set_xlabel("X軸: 中心からの距離[mm]", fontsize = 16, fontname="MS Gothic") 15ax.set_ylabel("Y軸: 中心からの距離[mm]", fontsize = 16, fontname="MS Gothic") 16ax.set_zlabel("Z軸: 変位[μm]", fontsize = 16, fontname="MS Gothic") 17 18a1= np.loadtxt("gifyou.csv", delimiter=",", usecols=(0) ) 19a= a1[0] 20b1= np.loadtxt("gifyou.csv", delimiter=",", usecols=(1) ) 21b= b1[0] 22c1= np.loadtxt("gifyou.csv", delimiter=",", usecols=(2) ) 23c= c1[0] 24h1= np.loadtxt("gifyou.csv", delimiter=",", usecols=(3) ) 25h= h1[0] 26 27#x,y面の範囲 28x = np.linspace(-45, 45, 10) 29y = np.linspace(-45, 45, 10) 30 31# 格子点を作成 32X, Y = np.meshgrid(x, y) 33# Zの作成 34Z = (h-a*X-b*Y)/c 35 36p1 = [ax.plot_surface(X, Y, Z, color="tomato",antialiased=False, alpha=0.3)] 37 38 39def update(i): 40 p1[0].remove() 41 aa= a1[i] 42 bb= b1[i] 43 cc= c1[i] 44 hh= h1[i] 45 ZZ = (hh-aa*X-bb*Y)/cc 46 p1[0]= ax.plot_surface(X, Y, ZZ, color="tomato",antialiased=False, alpha=0.3) 47 48 49ani = animation.FuncAnimation(fig, update, interval=100, frames=100) 50 51# 描画 52ani.save('sample.gif', writer="pillow",dpi=100) 53plt.show()

イメージ説明

投稿2023/05/08 02:18

kbox

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問