我使用 ctypes 在 python 中包装了一个 C 库并调用了 DLL。然后我创建了一个 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 i in range(0, 1032):
x = (g[0].time[i])
y = (g[0].data[0].f[i])
print(i, x, y)
这个 for 循环完美地工作并将所有数据打印到一个整洁的列表中,但我需要将该列表绘制成一个简单的图形。for 循环的返回如下所示:
1028 -1.2241029739379883 1.7323481895261962e+19
1029 -0.22411400079727173 2.635080461412465e+23
1030 0.7759910225868225 1.7829588197038883e+19
1031 1.7759920358657837 1.8027558490491145e+28
其中第二列对应于时间值,第三列是该时间的数据值。
我将 x 和 y 设置为指向包含所有数据的对象的指针。我很难将这些数据放入图表中。知道我做错了什么,因为在大多数 matplotlib 示例中,他们只是创建随机数据并绘制它。我需要一种方法将我的数据放入图表中。这不起作用:
plt.plot(x, y)
plt.show()
它构建了一个图形,但它不会将数据填充到图形中。这就是我的图表的样子,这是不好的。
如何将我的数据从打印的值对列表中获取到基本图形中?
x 和 y 是单个浮点数,而不是打印语句输出所指示的数组。plt.plot()
试图在点之间画线,但由于只有一个点,所以不可能有线。我假设你想以某种方式将 x 和 y 变成值数组,也许是这样的......
x = []
y = []
for i in range(0, 1032):
x.append(g[0].time[i])
y.append(g[0].data[0].f[i])
然后当传递给plt.plot
有多个点交替绘制如果你想在非连接点上绘制散点图,请使用plt.scatter
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句