2017-07-14 15 views
-2

私はctypesを使ってPythonでCライブラリをラップし、DLLを呼び出しました。私はその後、すべてのデータを印刷するfor-loopを作成しました。ここに私がラップしたコードの小さなサンプルがあります。forループの値を使って基本グラフを作成する

import ctypes 
from ctypes import * 
import matplotlib.pyplot as plt 

class ParmData(Union): 
_fields_ = [ 
    ('c', ctypes.POINTER(ctypes.c_ubyte)), 
    ('f', ctypes.POINTER(ctypes.c_float))] 
class SParm(Structure): 
pass 
SParm._fields_ = [ 
    ('data', ctypes.POINTER(ParmData)), 
    ('time', ctypes.POINTER(ctypes.c_float))] 

dll.readSParm.argtypes = (POINTER(SFile), c_char_p, c_double, c_double, c_double, POINTER(TTag), c_ushort,) 
dll.readSParm.restype = POINTER(SParm) 
g = dll.readSParm(SF, ParmName, startTime, stopTime, Null, None, convertType) 
dll.freeSParm(g) 

forループから出力されるデータポイントを持つ簡単なグラフを作成したいとします。これは私がこれまで持っているものです:forループ

for i in range(0, 1032): 
x = (g[0].time[i]) 
y = (g[0].data[0].f[i]) 
print(i, x, y) 

これは完璧に動作し、きちんとしたリストにすべてのデータを出力しますが、私はそのリストには、単純なグラフにプロットする必要があります。 2番目の列は時間値に対応し、3番目の列は、その時点のデータ値である

1028 -1.2241029739379883 1.7323481895261962e+19 
1029 -0.22411400079727173 2.635080461412465e+23 
1030 0.7759910225868225 1.7829588197038883e+19 
1031 1.7759920358657837 1.8027558490491145e+28 

:forループのリターンは次のようになります。

xとyを、すべてのデータを含むオブジェクトへのポインタと等しく設定しました。 グラフにそのデータを表示するのが難しいです。 idk私が間違っているのは、ほとんどのmatplotlibの例ではランダムなデータを作成してプロットするからです。自分のデータをグラフに入れる方法が必要です。 これは動作しません:

plt.plot(x, y) 
plt.show() 

これは、グラフを作成しますが、それは、グラフにデータを移入しません。これは私のグラフが悪くないように見えるものです。 Bad Graph

私の質問はこれです:

どのように私は、基本的なグラフに値のペアの印刷されたリストから自分のデータを得ることができますか?

+0

色を付けてみましたか? plt.plot(x、y、 ' - r') –

+0

あなたのxとyがforループで再初期化されるので、代わりにリストを作成したいと思うかもしれません。 –

+1

'plot(g [0] .time、g [0] .data [0] .f)'を使うとうまくいくと思いますか? – Bart

答えて

0

xとyは、print文の出力で示される配列ではなく、単一のfloat型です。 plt.plot()は点の間に線を描こうとしますが、点が1つしかないため線がありません。私はplt.plotに渡されたときに、複数のポイントは、あなたが散布図にしたい場合は、交互に プロットすることがあり

x = [] 
y = [] 
for i in range(0, 1032): 
    x.append(g[0].time[i]) 
    y.append(g[0].data[0].f[i]) 

...あなたは何とかおそらく値の配列の中にこのような何かを、xとyを作りたいと仮定します接続されていないポイントでは、 plt.scatter

+0

なぜデータが 'g [0] .time'と' g [0] .data [0] .f'にあるときに、新しいリストを作成するのですか? – Bart

+0

@ Bart私はそれについて考えましたが、このオブジェクトのフィールドがカスタムラップライブラリのものであることを考えると、完全な '__slice__'表記をサポートしているかどうかは不明でした。プロセス全体がどのように揺れているのか、私はあまりよく分かりません。 – Aaron

+0

さて、公正な点:) – Bart

関連する問題