animation.FuncAnimation()
に引数を渡す方法は?試しましたがうまくいきませんでした。 animation.FuncAnimation()
のシグネチャは
クラスmatplotlib.animation.FuncAnimation(fig、func、frames = None、init_func = None、fargs = None、save_count = None、** kwargs)ベース:matplotlib.animation.TimedAnimation
以下のコードを貼り付けました。どの変更を行う必要がありますか?
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def animate(i,argu):
print argu
graph_data = open('example.txt','r').read()
lines = graph_data.split('\n')
xs = []
ys = []
for line in lines:
if len(line) > 1:
x, y = line.split(',')
xs.append(x)
ys.append(y)
ax1.clear()
ax1.plot(xs, ys)
plt.grid()
ani = animation.FuncAnimation(fig,animate,fargs = 5,interval = 100)
plt.show()
この簡単な例を確認してください:
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
data = np.loadtxt("example.txt", delimiter=",")
x = data[:,0]
y = data[:,1]
fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([],[], '-')
line2, = ax.plot([],[],'--')
ax.set_xlim(np.min(x), np.max(x))
ax.set_ylim(np.min(y), np.max(y))
def animate(i,factor):
line.set_xdata(x[:i])
line.set_ydata(y[:i])
line2.set_xdata(x[:i])
line2.set_ydata(factor*y[:i])
return line,line2
K = 0.75 # any factor
ani = animation.FuncAnimation(fig, animate, frames=len(x), fargs=(K,),
interval=100, blit=True)
plt.show()
まず、データ処理のためにNumPyを使用することをお勧めします。データの読み取りと書き込みが最も簡単です。
各アニメーションステップで「プロット」関数を使用する必要はありません。代わりにset_xdata
およびset_ydata
データを更新するためのメソッド。
Matplotlibドキュメントの例も確認してください: http://matplotlib.org/1.4.1/examples/animation/ 。
私はあなたがほとんどそこにいると思います、以下は基本的にあなたが図を定義し、軸ハンドルを使用してfargs
をリストの中に置く必要があるいくつかのマイナーな微調整があります、
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
fig, ax1 = plt.subplots(1,1)
def animate(i,argu):
print(i, argu)
#graph_data = open('example.txt','r').read()
graph_data = "1, 1 \n 2, 4 \n 3, 9 \n 4, 16 \n"
lines = graph_data.split('\n')
xs = []
ys = []
for line in lines:
if len(line) > 1:
x, y = line.split(',')
xs.append(float(x))
ys.append(float(y)+np.sin(2.*np.pi*i/10))
ax1.clear()
ax1.plot(xs, ys)
plt.grid()
ani = animation.FuncAnimation(fig, animate, fargs=[5],interval = 100)
plt.show()
example.txt
は、ファイルがなく、プロットが移動するようにi
への依存関係に追加したため、ハードワイヤード文字列に置き換えます。
以下に、引数をanimation.funcAnimation関数に適切に渡す方法のコード例を示します。
以下のすべてのコード部分を1つの。pyファイルとして保存すると、ターミナルで次のようにスクリプトを呼び出すことができます。$python3 scriptLiveUpdateGraph.py -d data.csv
where data.csvは、ライブで表示するデータを含むデータファイルです。
以下は私のスクリプトです:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import argparse
import time
import os
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ここでは、後で animation.funcAnimation 関数によって呼び出される関数を宣言します。
def animate(i, pathToMeas):
pullData = open(pathToMeas,'r').read()
dataArray = pullData.split('\n')
xar = []
yar = []
colunmNames = dataArray[0].split(',')
# my data file had this structure:
#col1, col2
#100, 500
#95, 488
#90, 456
#...
# and this data file can be updated when the script is running
for eachLine in dataArray[1:]:
if len(eachLine) > 1:
x, y = eachLine.split(',')
xar.append(float(x))
yar.append(float(y))
# convert list to array
xar = np.asarray(xar)
yar = np.asarray(yar)
# sort the data on the x, I do that for the problem I was trying to solve.
index_sort_ = np.argsort(xar)
xar = xar[index_sort_]
yar = yar[index_sort_]
ax1.clear()
ax1.plot(xar, yar,'-+')
ax1.set_xlim(0,np.max(xar))
ax1.set_ylim(0,np.max(yar))
スクリプトをよりインタラクティブにするために、入力ファイルを argparse で読み取る可能性を追加しました。
parser = argparse.ArgumentParser()
parser.add_argument("-d","--data",
help="data path to the data to be displayed.",
type=str)
args = parser.parse_args()
そして、私たちはこのスレッドの主な質問に答えていることを知っています:
ani = animation.FuncAnimation(fig, animate, fargs=(args.data,), interval=1000 )
plt.show()