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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1624閲覧

三次元アニメーションの保存について/ IndexError : list index out of range

python_wakaran

総合スコア13

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/20 15:50

三次元アニメーションの保存を試みています。そこで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(?)

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

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

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

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

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

jbpb0

2021/12/20 23:13 編集

> ValueError: not enough image data https://github.com/matplotlib/matplotlib/issues/15678/ によると、Matplotlib 3.3あたりで修正されてるようです > jupyter labで同じく実行してみたところ、アニメーションの保存ができました。 エラーが出る環境と、エラーが出ないjupyterで、Matplotlibのバージョンは同じでしょうか?
python_wakaran

2021/12/21 02:39

jbpd0さん回答ありがとうございました。 確かに使用していた環境でのMatplotlibのバージョンは3.1.3なのに対して、jupyterでのバージョンは3.5.1でした。なので、現環境でmatplotlibのバージョンをアップデートしたところ、無事解決しました。 次回からエラーが出た際には使用しているライブラリのバージョンの確認もしてみようと思います。ありがとうございました。
guest

回答1

0

自己解決

matplotlibのバージョンをアップデートする。
バージョン3.3あたりから、このエラーが改善されたらしい。jupyter labで実行できたのは環境が異なるから。

投稿2021/12/21 02:40

python_wakaran

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問