私は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()
これは、グラフを作成しますが、それは、グラフにデータを移入しません。これは私のグラフが悪くないように見えるものです。
私の質問はこれです:
どのように私は、基本的なグラフに値のペアの印刷されたリストから自分のデータを得ることができますか?
色を付けてみましたか? plt.plot(x、y、 ' - r') –
あなたのxとyがforループで再初期化されるので、代わりにリストを作成したいと思うかもしれません。 –
'plot(g [0] .time、g [0] .data [0] .f)'を使うとうまくいくと思いますか? – Bart