我有一个文件“00.csv”,可以在每个新周期更新(文件00.csv:读取另一个文件的结果,每次(每个周期)提取后两个值)。
这是00.csv文件:
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
我创建了一个简单的脚本,以绘制图形动画。
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()
我的问题是:在第八个周期之后,其他周期被添加(我的意思是:列x,y)到00.csv文件,如下所示:
9, -1184.658861339248 # ninth cycle
10, -1184.658863735214 # tenth cycle
11, -1184.658862250518 # eleventh cycle
但图表在第八个周期仍然冻结,它不会更新!! ???
另外,我跟着Matplotlib create real time animated graph,但我没有解决我的问题。
有没有办法在新周期后自动读取文件00.csv,以刷新我的图形?
您在此处绘制的值似乎是字符串而不是数字。这没有任何意义。
在尝试绘制它们之前,首先将它们转换为数字。
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)