4

こんにちは。少し手伝ってくれませんか?2 つの質問があります。

  1. なぜ dieinitanimatefunction の両方に、 だけを返した後にコンマが必要なのPLOTですか?
  2. 私のコードが を更新しないのはなぜtime_textですか? すべてのアニメーションの後に t を印刷すると、コンソールに正しく追加されますが、テキストはプロットで更新されません。

.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

fig = plt.figure()
sub = fig.add_subplot(111,xlim=(0, 10), ylim=(0, 1))
PLOT, = sub.plot([],[])
time_text = sub.text(1,1,"",transform = sub.transAxes, ha="right")
t = 0

def init():
    PLOT.set_data([],[])
    time_text.set_text("")
    return PLOT,time_text

def animate(i):
    global t
    x = np.linspace(0,10,1000)
    y = np.exp(- ((x-0.01*i)/(2))**2 )/np.sqrt(2*np.pi)
    t += 1

    PLOT.set_data(x,y)
    time_text.set_text("time = "+str(t))
    return PLOT, time_text

ani = animation.FuncAnimation(fig, animate, init_func=init, frames=2000, interval=20, blit=True)

plt.show()
4

3 に答える 3

1

他の回答は、最初の質問に完全に回答しているわけではありません。

initandの return ステートメントは、が使用されているanimate場合にのみ厳密に必要ですblit=True。これらの関数は、アニメーション用に更新する反復可能なアーティストを返すことが期待されています。アーティストが 2 人いる場合、リターンは次のようになります。

return artist1, artist2
# or 
return [artist1, artist2]

1 人のアーティストを更新する場合でも、イテラブルが必要であることを覚えておく必要があります。その単一のアーティストの後にコンマを使用することは、関数が反復可能なものを返すようにする最も簡単な方法です

return artist1,
# or 
return [artist1]
于 2018-02-10T23:11:15.950 に答える
0

Python では、タプルは括弧とコンマを使用して記述されます。たとえば、(3,2) は 2 タプルです。1 つのタプルは (2,) で、長さは 1 です。これは、長さがまったく定義されていない int 2 とは区別されます。注: () は内容が空の 0 タプルです。

この場合、関数は長さ 1 の列挙型を返すため、コンマを省略すると PLOT が列挙型になります。コンマ記号を使用すると、タプル PLOT の内容が戻り値の内容と一致します。

割り当てでは括弧を省略できるため、PLOT, は (PLOT,) と同じです。

于 2015-02-18T12:52:27.427 に答える