20

配列に格納されている 3 つのヒストグラムを更新する複雑なアルゴリズムがあります。アルゴリズムをデバッグしたいので、ユーザー インターフェイスで配列をヒストグラムとして表示することを考えていました。これを行う最も簡単な方法は何ですか。(迅速なアプリケーション開発は、最適化されたコードよりも重要です。)

Qt (C++) の経験と matplotlib の経験があります。

(この質問は 1 日か 2 日開いたままにしておきます。これは、私が持っていないより多くの経験がないと解決策を評価するのが難しいためです。コミュニティの投票が最良の回答を選択するのに役立つことを願っています。)

4

4 に答える 4

23

編集:最近では、使用する方が簡単で優れています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()

最初に投稿したコードを使用して毎秒 4 フレームと比較して、この方法で毎秒約 14 フレームを取得できます。秘訣は、matplotlib に完全な図を描画するように要求しないようにすることです。代わりにplt.hist、一度呼び出してから既存matplotlib.patches.Rectangleの を操作しpatchesてヒストグラムを更新し、呼び出し fig.canvas.draw()て更新を表示します。

于 2010-11-09T02:37:15.567 に答える
13

リアルタイム プロットには、Chaco、pyqtgraph、または glumpy や visvis などの opengl ベースのライブラリを試すことをお勧めします。Matplotlib はそのままでは素晴らしいものですが、一般的にこの種のアプリケーションには適していません。

編集: glumpy、visvis、galry、および pyqtgraph の開発者はすべて、 vispy と呼ばれる視覚化ライブラリで共同作業しています。まだ開発の初期段階ですが、有望であり、すでに非常に強力です。

于 2013-02-09T21:21:18.283 に答える
1

インタラクティブ モードで matplotlib を使用することをお勧めします。.show一度呼び出すと、独自のウィンドウにポップアップ表示されます。そうでない場合は、メモリ内にのみ存在し、使い終わったときにファイルに書き込むことができます。

于 2010-11-09T01:48:19.753 に答える
0

ええと、リアルタイムと言うときは、5 Hz よりも高いリフレッシュ レートが必要であることを意味します。matplotlib は機能しません。私は以前にこの問題を抱えていました.PyQtで動作するPyQwtに行きました。

于 2010-11-09T01:49:03.650 に答える