2

タイムスタンプと、低から高、または高から低のいずれかのエッジ遷移を含むメッセージを頻繁に受信する Python コードがいくつかあります。最小限の労力でデジタル波形をすばやく汚い形で視覚化するために、各遷移をストリップチャートにグラフ化したいと思います。

これを簡単にする方法やパッケージをお勧めできますか?

また、データを csv 形式などでエクスポートし、別のプログラムにロードする方が簡単な場合は反対しません。

編集:

CairoPlot を試してみました:

>>> data = [(10, 0), (11, 1), (12.5, 0), (15, 1)]
>>> def fn(t):
...     for d in data:
...             if t > d[0]:
...                     return d[1]
...     return data[-1][1]
...
>>> CairoPlot.function_plot( 'tester.png', data, 500, 300, discrete = True, h_bounds=( data[0][0],data[-1][0]), step = 1 )

これにより、CPU が 100% で 10 分以上固定され、着実にメモリを消費していました。スワップをすべて使い切る前に殺しました。何か間違ったことをしているのですか、それとも CairoPlot が壊れているだけですか?

さらに編集:

上記のコードに大まかに基づいて、CairoPlot を使用してより実行可能なものになりました。ただし、解像度のために完全ではありません。より短いパルスの一部をキャッチするには、最大で数十ナノ秒 (1e-8) の解像度が必要になる場合があります。数秒のグラフの場合、この方法では非常に時間がかかります。

4

7 に答える 7

2

Matplotlibが機能する可能性があります。このストリップ チャートのデモをご覧ください。

于 2009-02-17T19:04:22.747 に答える
2

私自身は使っていませんが、Cairo Plotは一見の価値があるかもしれません。

于 2009-02-17T14:35:19.680 に答える
1

CairoPlot を試してみてください:

import CairoPlot

#the data list stands for your low-to-high (1) and high-to-low (0) data
data = lambda x : [0,0,1,1,0,0,1][x]
CairoPlot.function_plot( 'Up_and_Down', data, 500, 300, discrete = True, x_bounds=( 0,len(data) - 1 ), step = 1 )

詳細については、CairoPlotを確認してください。

編集:

ここであなたの関数 fn(t) を理解できませんでした。function_plot の考え方は、ベクトルではなく関数をプロットすることです。

これらの点をプロットするには、次の方法で function_plot を使用できます。

#notice I have split your data into two different vectors,
#one for x axis and the other one for y axis
x_data = [10, 11, 12.5, 15]
y_data = [0, 1, 0, 1]

def get_data( i ):
    if i in x_data :
        return y_data[x_data.index(i)]
    else :
        return 0

CairoPlot.function_plot( 'Up_and_Down', get_data, 500, 300, discrete = True, x_bounds=( 0,20 ), step = 0.5 )

私はそれがうまくいくと思います

100% ピニング CPU の場合、それは起こるべきではありません... 今日は後で見ていきます。ご指摘ありがとうございます\o_

于 2009-02-17T14:52:53.023 に答える
0

tkinter のみを使用する (外部パッケージは不要) リアルタイム ストリップチャート アプリケーションについては、wxPython に最適なリアルタイム プロット ウィジェットは何ですか? を参照してください。.

あなたの質問を理解できれば、ナノ秒の解像度のタイムスタンプでメッセージをリアルタイムで受信していますが、1 秒あたり 10^9 のメッセージが表示されるとは思っていません。平均メッセージ レートが低い (1 秒あたり 100 メッセージ以下) 場合は、タイムスタンプを無視して、一度に 1 メッセージずつ遷移をプロットします。グラフのタイムスケールが 1 ピクセルあたり 10 ミリ秒の場合、40 ミリ秒にわたって 4 つのトランジションが描画されますが、少なくとも何かが起こったことを見逃すことはありません。

于 2011-09-30T02:44:04.523 に答える
0

http://bitworking.org/projects/sparklines/は小さなグラフを提供します。

于 2009-02-17T16:07:12.890 に答える