animationがうまくいかないです。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 8,677
animationとして、以下のコード結果を動画で保存したいのですが、以下のようなエラーが出てしまいました。
いくつかネットで調べたのですが、おそらく
def plot(data):
plt cla()
のやり方の方が今回は良いかもしれませんが、以下は違う書き方を自分がしていると思います。
import numpy as np
import matplotlib.pyplot as plt
import math
#from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation
fig = plt.figure()
ims=[]
#環境設定
n=100
m=100
theta = 3*(math.pi)/12
P = [[np.cos(theta),np.sin(theta)],[0,0]]
Q = [[0,0],[np.sin(theta),-np.cos(theta)]]
x_list=[]#xline
t_list=[]#time
p_list=[]#probability
s_list=[]#state
a = 1/math.sqrt(2)
b = 1j/math.sqrt(2)
for x in range(0,2*m+1):
if x == m:
phi = [a ,b]
else:
phi = [0,0]
p = np.dot(phi,np.conj(phi))
x_list.append(x)
s_list.append(phi)
p_list.append(p)
for t in range(0,n+1):
t_list.append(t)
if t ==0:
s_list
p_list
else:
next_s_list = [0]*len(s_list) #s_listと同じ要素の数ですべて0を用意(初期化)
for x in range(0,2*m+1):
if x == 0:
next_s_list[0] = np.inner(P, s_list[1])
elif x == 2*n:
next_s_list[2*m] = np.inner(Q, s_list[2*m-1])
else:
next_s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
p_list[x] = np.dot(next_s_list[x],np.conj(next_s_list[x]))
s_list = next_s_list
#確率の挙動をみたいなら
print(t,s_list)
plt.xlabel("x")
plt.ylabel("probability")
plt.ylim([0,0.1])
plt.xlim([-m,3*m])
line = plt.plot(x_list,np.real(p_list),color="red",linewidth=0.3)
ims.append([line])
ani = animation.ArtistAnimation(fig,ims, interval=100)
ani.save("quantumwalk.gif")
ちなみに、コード自体は計算されており、エラーが以下のように出ました。
ValueError: outfile must be *.htm or *.html
結構、調べたんですけど、力足らずで申し訳ないです。。
ご指導の程、宜しくお願いします。。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
動画の生成に必要なMovieWriterが存在しないためだと思われます。
環境にもよりますがmatplotlib のanimation を保存などに記載されているように別途ツールのインストールと設定が必要なようです。
詳細未未確認ですが.to_jshtmlにてインタラクティブなHTML形式で出力する手法だとMovieWrite不要なようです。
ちなみに当方Win10+Anaconda
環境での検証結果は以下のとおりとなりました。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 単純なアニメーション
fig = plt.figure()
x = np.arange(0, 10, 0.1)
ims = []
for a in range(50):
y = np.sin(x - a)
line, = plt.plot(x, y, "r")
ims.append([line])
ani = animation.ArtistAnimation(fig, ims)
ani.save('anim.gif')
# MovieWriter ffmpeg unavailable. と表示されるがOK
# ani.save('anim.gif', writer="imagemagick")
# ani.save('anim.mp4')
# ani.save('anim.mp4', writer="ffmpeg")
#
# 以下のようなエラーにてNG
#
# MovieWriter imagemagick(またはffmgpeg) unavailable.
# Traceback (most recent call last):
# 略
# ValueError: outfile must be *.htm or *.html
#
#ani.save('anim.htm')
#
# 以下のようなエラーにてNG
#
# MovieWriter ffmgpeg unavailable.
# Traceback (most recent call last):
# 略
# AttributeError: module 'PIL._webp' has no attribute 'HAVE_WEBPANIM'
# OK
s = ani.to_jshtml()
with open( 'anim.html', 'w') as f:
f.write(s)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/05/10 00:41
確認してみます