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

问题描述 投票:0回答:1

我有一个文件“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()

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

我的问题是:在第八个周期之后,其他周期被添加(我的意思是:列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,以刷新我的图形?

python animation matplotlib
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.