1

私はpythonとmatplotlibが初めてで、いくつかのポインターが必要です。テーブルをクエリして結果をプロットするモニターを作成しようとしています。テーブルから、X 軸に使用するタイムスタンプと、Y 値 (送信されたパケット数) に使用する秒数を抽出できます。アニメート機能の「i」がどこに入力されているかわかりません。私のプロットが表示されますが、空です。ax.set_xlim を何に設定する必要があるのか​​ わかりません。最後に、日付/タイムスタンプを x 軸に表示するにはどうすればよいですか? 次の例を変更しようとしています。

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

fig = plt.figure()
ax = plt.axes(ylim=(0, 45))
line, = ax.plot([], [], lw=5)

def init():
    line.set_data([], [])
    return line,

def animate(i):
    x,y,dk=getData()
    line.set_data(x, y)
    return line,

def Execute():
    #anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=200, blit=True)
    anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=2000)
    plt.show()
    return(anim)

def getDataSql(sql):
    ... run sql
    return(rl)

def getData():
    ...format return for getDataSql 
    ...return X ex(2013-04-12 18:18:24) and Y ex(7.357) (both are lists)
    return(X,Y,xy)

x=Execute()
4

1 に答える 1

1
def Execute():
    anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=2000, blit=True)
    plt.show() 
    return anim

anim = Execute()

オブジェクト(すべてのタイマーなどを含む)を返さないと、返さanimれるときにガベージコレクションが行われ、Executeそれらのオブジェクトがすべて削除されるため、アニメーションは実行されません。

を使用してテストすることもできますblit=Falseが、少し遅くなります (これは 2 秒ごとに更新しているので問題ではありません) が、正しく動作させるのは少し難しくありません。

また、試してみてください

ax.get_xaxis().set_major_locator(matplotlib.dates.AutoDateLocator())
ax.get_xaxis().set_major_formatter(matplotlib.dates.AutoDateFormatter())

何かを実行する前に。

于 2013-04-19T19:39:14.630 に答える