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

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

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

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

Anaconda

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

Matplotlib

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

Python

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

解決済

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

python_wakaran
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による文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

244閲覧

投稿2021/12/20 15:50

三次元アニメーションの保存を試みています。そこでIndexError: list index out of rangeというエラーが発生するのですが、このエラーの内容はリストのサイズを超えたインデックスの要素を参照しようとした時に発生するものであると理解しています。しかし、このエラーの発生場所が特定できないので質問させていただきました。
詳細を以下に示します。

python

import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation z = np.arange(25) graph_range = np.arange(-2.25, 1.76) x, y = np.meshgrid(graph_range, graph_range) x = x.ravel() y = y.ravel() zero_z = np.zeros_like(z) act_graph_range = np.arange(-2, 3) x_act, y_act = np.meshgrid(act_graph_range, act_graph_range) x_act = x_act.ravel() y_act = y_act.ravel() fitting_data = np.arange(1, 26) def plot_graph(): ax.bar3d(x, y, zero_z, 0.5, 0.5, fitting_data, color='c', alpha=0.4) ax.plot(x_act, y_act, z, color='k', marker='o', linestyle='None') #グラフの回転の設定 def plt_graph3d(angle): ax.view_init(azim=angle*5) fig, ax = plt.subplots(subplot_kw={'projection':'3d'}) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('height') #360°回転するアニメーションを作成し、保存する ani = FuncAnimation(fig, func=plt_graph3d, frames=72, init_func=plot_graph, interval=300) ani.save('aaa.gif', writer='pillow') plt.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(?)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jbpb0
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
python_wakaran

2021/12/21 02:39

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Jupyter

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

Anaconda

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

Matplotlib

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

Python

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