三次元アニメーションの保存を試みています。そこでIndexError: list index out of rangeというエラーが発生するのですが、このエラーの内容はリストのサイズを超えたインデックスの要素を参照しようとした時に発生するものであると理解しています。しかし、このエラーの発生場所が特定できないので質問させていただきました。
詳細を以下に示します。
python
1import numpy as np 2from matplotlib import pyplot as plt 3from mpl_toolkits.mplot3d import Axes3D 4from matplotlib.animation import FuncAnimation 5 6z = np.arange(25) 7graph_range = np.arange(-2.25, 1.76) 8x, y = np.meshgrid(graph_range, graph_range) 9x = x.ravel() 10y = y.ravel() 11zero_z = np.zeros_like(z) 12act_graph_range = np.arange(-2, 3) 13x_act, y_act = np.meshgrid(act_graph_range, act_graph_range) 14x_act = x_act.ravel() 15y_act = y_act.ravel() 16fitting_data = np.arange(1, 26) 17def plot_graph(): 18 ax.bar3d(x, y, zero_z, 0.5, 0.5, fitting_data, color='c', alpha=0.4) 19 ax.plot(x_act, y_act, z, color='k', marker='o', linestyle='None') 20 #グラフの回転の設定 21def plt_graph3d(angle): 22 ax.view_init(azim=angle*5) 23 24fig, ax = plt.subplots(subplot_kw={'projection':'3d'}) 25ax.set_xlabel('x') 26ax.set_ylabel('y') 27ax.set_zlabel('height') 28 29#360°回転するアニメーションを作成し、保存する 30ani = FuncAnimation(fig, func=plt_graph3d, frames=72, init_func=plot_graph, interval=300) 31ani.save('aaa.gif', writer='pillow') 32plt.show()
このプログラムはvisual studio code で作成しています。このまま実行すると以下のようなエラーが発生してしまいます。
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\animation.py", line 230, in saving
yield self
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\animation.py", line 1156, in save
writer.grab_frame(**savefig_kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\animation.py", line 572, in grab_frame
buf.getvalue()))
File "C:\ProgramData\Anaconda3\lib\site-packages\PIL\Image.py", line 2581, in frombytes
im.frombytes(data, decoder_name, args)
File "C:\ProgramData\Anaconda3\lib\site-packages\PIL\Image.py", line 772, in frombytes
raise ValueError("not enough image data")
ValueError: not enough image data
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 31, in <module>
ani.save('aaa.gif', writer='pillow')
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\animation.py", line 1156, in save
writer.grab_frame(**savefig_kwargs)
File "C:\ProgramData\Anaconda3\lib\contextlib.py", line 130, in exit
self.gen.throw(type, value, traceback)
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\animation.py", line 232, in saving
self.finish()
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\animation.py", line 575, in finish
self._frames[0].save(
IndexError: list index out of range
しかし、ani.save('aaa.gif', writer='pillow')をコメントアウトした場合、実行されてアニメーションが表示されます。
またjupyter labで同じく実行してみたところ、アニメーションの保存ができました。
これにより、使用しているpythonのバージョンが古いなどが原因なのかと考えたのですが、アップデートしても状況は改善されませんでした。
同様の質問がterateil上でなされていたのですが、解決されていないようです。
https://teratail.com/questions/283097
以上の問題について解決策がわかる方いらっしゃいましたら、ご指導いただければ幸いです。
python version:3.7.6
anaconda version:4.8.2
windows version: 20H2(?)
回答1件
あなたの回答
tips
プレビュー