我正在尝试使用animation
中的matplotlib
函数生成实时数据图。我从以下链接中引用本教程以获得我的支持:Realtime Plotting in MatPlotLib
我正在阅读的data.txt
文件每秒都会使用新数据进行更新。进入的数据如下:[0.0263671875, 0.03515625, 1.0087890625][0.01171875, 0.0146484375, 0.4404296875][0.01171875, 0.0146484375, 0.4404296875]
......等等。
animate函数的前三行是提取每个数组中的第三个元素:
data = pd.read_csv("C:\\Users\\Desktop\\data.txt", sep="\[|\]\[|\]",engine = 'python', header = None)
data = data.iloc[0]
data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float)
data.pop(0)
我在Jupyter笔记本中验证了这段代码,输出如下(我正在寻找):
我的第一个挑战来自于我试图实时生成图表的时候。我的数据没有x轴(时间)。因此,我的第一个障碍之一是在数据流更新时生成人工x轴。上面链接的教程中的代码用作模板。我将指出我为了特定目的而努力修改的领域。
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
def animate(i):
data = pd.read_csv("C:\\Users\\Desktop\\data.txt", sep="\[|\]\[|\]",engine = 'python', header = None)
data = data.iloc[0]
data = data.astype(str).apply(lambda x: x.split(',')[-1]).astype(float)
data.pop(0)
xar = []
yar = []
for eachLine in data:
if len(eachLine)>1:
x,y = eachLine.split(',')
xar.append(int(x))
yar.append(int(y))
ax1.clear()
ax1.plot(xar,yar)
ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
除了人工创建x轴编号以便我可以创建绘图外,我还需要修改for循环:
xar = []
yar = []
for eachLine in data:
if len(eachLine)>1:
x,y = eachLine.split(',')
xar.append(int(x))
yar.append(int(y))
在链接中提供的示例中,他们的数据流有一个x
和y
数据点,由一列分隔。我拥有的数据流只是一个值。
如何将我的代码修改为(1)添加适当的x轴以便能够绘图,以及(2)正确地通过for循环以便将值附加到xar
和{{ 1}}实时绘制图形。
编辑1 我尝试了以下,但它不起作用,需要一些帮助...但这是我的第一枪。我收到了错误:
yar
我的代码如下:
if len(eachLine)>1:
TypeError: object of type 'numpy.float64' has no len()
谢谢!
答案 0 :(得分:2)
对于读入的数据一无所知,很难理解问题。但是,一般情况下,您将从数据框中绘制一列,如下所示
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
def animate(i):
data = pd.read_csv(...)
yar = data[ "column to plot" ]
xar = range(len(data))
ax.clear()
ax.plot(xar,yar)
ani = animation.FuncAnimation(fig, animate, interval=10)
plt.show()