我使用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()
它构建了一个图表,但它并没有将数据填充到图表中。这就是我的图表看起来没什么好处的。
如何将打印的值对列表中的数据导入基本图形?
答案 0 :(得分:0)
x和y是单个浮点数,而不是print语句输出所指示的数组。 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