如何使用matplotlib在另一个周期之后更新/刷新我的图形(动画图形)?

时间:2017-12-23 02:09:50

标签: python animation matplotlib

我有一个文件" 00.csv",可以在每个新周期更新(文件00.csv:是读取另一个文件的结果,每个文件提取到后两个值时间(每个周期)。

这是00.csv文件:

>>> factor_terms(A).replace(lambda x: x.is_Add, lambda x: collect(x, (R, Rs)))
>>> _.count_ops()
117

我创建了一个简单的脚本,以便绘制图形动画。

0, -1184.645675411964
1, -1184.653778859924 # first cycle
2, -1184.657325034754 # second cycle
3 -1184.657972735058
4, -1184.658582481392
5, -1184.658800896487
6, -1184.658844384850
7, -1184.658846846248
8, -1184.658825508352 # eighth cycle

结果(在某个时刻:第八个周期)如下: enter image description here

我的问题是:在第八个周期之后,其他周期被添加(我的意思是:列x,y)到00.csv文件,如下所示:

import matplotlib.pyplot as plt
from matplotlib import style
import matplotlib.animation as animation

fig = plt.figure()
ax1 = fig.add_subplot(111)


def animate(i):
  graph_data = open('00.csv', 'r') .read()
  lines = graph_data.split('\n')
  xs = []
  ys = []
  for line in lines:
    if len(line) > 1:
      x, y = line.split(',')
      xs.append(x)
      ys.append(y)
  ax1.clear()
  ax1.plot(xs, ys , color='blue', linestyle='dashdot', linewidth=4, marker='o', markerfacecolor='red', markeredgecolor='black',markeredgewidth=3, markersize=12)

ani = animation.FuncAnimation (fig , animate, interval=1000 )


#plt.legend(loc='upper right', fancybox=True)
plt.savefig("Plot_SCF-Energy_.pdf", dpi=150)
plt.savefig("Plot_SCF-Energy_.png", dpi=150)
plt.show()

但图表在第八个周期仍然冻结,它不会更新! ???

另外,我跟着Matplotlib create real time animated graph,但我没有解决我的问题。

有没有办法在新周期后自动读取文件00.csv,以刷新我的图表?

1 个答案:

答案 0 :(得分:0)

您在此处绘制的值似乎是字符串而不是数字。这没有任何意义。

在尝试绘制它们之前先将它们转换为数字。

xs.append(float(x))
ys.append(float(y))

您也可以考虑使用一些更有效的方法来读取数据。

import numpy as np

def animate(i):
    x,y = np.genfromtxt('00.csv', delimiter=",", unpack=True, invalid_raise=False)
    ax1.clear()
    ax1.plot(x, y)