2017-01-05 3 views
1

リアルタイムで「file.txt」から数値を読み取る必要があります(別のプログラムでは、数値のペアを保存して1/10秒ごとに上書きします)。フォロースクリプトは数字をプロットすることができますが、プロットを開始するときに読み込まれるペアだけです。 plt.ion()で試しましたが、この場合は何もしません。私は "file.txt"が更新されるたびに読みたい。'plotfile'メソッドを使用したPythonライブプロット

私が使用するコードは次のとおりです。

import matplotlib.pyplot as plt 

plot.plotfile('file.txt', delimiter=' ', cols=(1, 0), 
       names=('Volume', 'Tempo'), marker='o') 
plt.show() 

はケースでのライブプロットは、私がこれを行うことができますどのように「plotfile」メソッドで行うことができないのですか?

おかげ

+0

プログラム間でデータを転送する方法として静的ファイルを使用すると死んでしまいますか?それはキャッシュのために予測不可能なhdd書き込みに依存し、本質的に遅いです。さらに、新しいデータが準備されているときにプロットプログラムに通知する方法はありません。 – Aaron

+0

他にも... '.ion()'は、ファイルの読み込みやデータの更新には関係ありません。手動で行うこと – Aaron

+0

[Matplotlib animation](http://matplotlib.org/1.4.1/examples/animation/index.html)を使用してください。 –

答えて

0

は何をする必要がありますと、自動的にファイルをループを読み、グラフ描画操作するいくつかの方法を作成している(私はCSV方法や他のStackOverflowのソリューションを試してみましたが、ファイルの読み込みは毎回失敗します)。これはforループで行うことができますが、私の推奨する方法はおそらくmatplotlib.animation.FuncAnimation()です。あなたのケースでは、10フレーム/秒はおそらく高速ではないので、ブリッティングについて心配する必要がありますが、それは良い練習であり、MPLのスピードをはるかに上げるのに役立ちます。提供されたexampleFuncAnimation()は、描画する線のアーティストにyデータを更新するよう呼び出すだけで、blittingを使用します。 plt.plotfile()を使用している場合は、アーティストを更新して新しいデータを正しく取得するのがさらに難しくなるので、データを自分で読み、artists = plt.plot()(またはそれに類するもの)を呼び出すことをおすすめします。これにより、グラフ全体を再描画することなく、ラインアーティストのデータを単純に更新することができます。lineartist.set_ydata(dataReadFromFile)

関連する問題