Pythonプログラム用のシンプルなUIにリアルタイムグラフを表示するにはどうすればよいですか?
-
29-09-2019 - |
質問
配列に保存されている3つのヒストグラムを更新する複雑なアルゴリズムがあります。アルゴリズムをデバッグしたいので、ユーザーインターフェイスのヒストグラムとして配列を表示することを考えていました。これを行う最も簡単な方法は何ですか。 (最適化されたコードよりも迅速なアプリケーション開発は重要です。)
QT(C ++)での経験があり、Matplotlibの経験があります。
(私はこの質問を1日か2日開いたままにしておきます。なぜなら、私が持っていない経験なしにソリューションを評価するのは難しいからです。
解決
編集:最近では、使いやすく、使用する方が良いです matplotlib.animation
:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def animate(frameno):
x = mu + sigma * np.random.randn(10000)
n, _ = np.histogram(x, bins, normed=True)
for rect, h in zip(patches, n):
rect.set_height(h)
return patches
mu, sigma = 100, 15
fig, ax = plt.subplots()
x = mu + sigma * np.random.randn(10000)
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='green', alpha=0.75)
ani = animation.FuncAnimation(fig, animate, blit=True, interval=10,
repeat=True)
plt.show()
アニメーション化されたグラフを作成する例があります ここ。この例に基づいて、次のようなことを試すことができます。
import numpy as np
import matplotlib.pyplot as plt
plt.ion()
mu, sigma = 100, 15
fig = plt.figure()
x = mu + sigma*np.random.randn(10000)
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='green', alpha=0.75)
for i in range(50):
x = mu + sigma*np.random.randn(10000)
n, bins = np.histogram(x, bins, normed=True)
for rect,h in zip(patches,n):
rect.set_height(h)
fig.canvas.draw()
コードIを使用して、1秒あたり4フレームと比較して、この方法で約14フレームを取得できます。 最初に投稿しました. 。トリックは、Matplotlibに完全な数字を描くように頼むことを避けることです。代わりに電話してください plt.hist
一度、既存の操作を操作します matplotlib.patches.Rectangle
s in patches
ヒストグラムを更新し、呼び出しますfig.canvas.draw()
更新を表示できるようにします。
他のヒント
リアルタイムプロットには、Chaco、Pyqtgraph、またはGlumpyやVisvisなどのOpenGLベースのライブラリを試すことをお勧めします。 Matplotlibは、そのように素晴らしいことですが、一般にこの種のアプリケーションには適していません。
編集: Glumpy、Visvis、Galry、およびPyqtgraphの開発者はすべて、視覚化ライブラリで協力しています。 ヴィスピー. 。それはまだ開発の初期段階ですが、有望ですでに非常に強力です。
電話する場合は、インタラクティブモードでMatplotlibを使用することをお勧めします .show
それからそれはそれ自体のウィンドウにポップアップします、あなたがそうしないと、それはメモリにのみ存在し、あなたがそれを完了したときにファイルに書き込むことができます。
ああ、今、あなたがリアルタイムと言うとき、あなたは5 Hzより高いリフレッシュレートが必要であるということを意味します。私は以前にこの問題を抱えていました、私は行った pyqwt それはPyqtで動作します。