Matplotlib从CSV实时更新条形图

时间:2018-10-23 18:57:36

标签: python csv matplotlib

python的新手,因此任何指导将不胜感激! 我有一个包含名称的CSV文件。我试图计算每个人的名字“亚当”并将其绘制在条形图中。 CSV更新时,我也希望条形图也更新。下面是我的代码。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
import csv
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
myCount = 0
otherCount = 0
def animate(i):
    with open('test2.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            if row['fName'] == 'Adam':
                myCount +=1
            else:
                otherCount = +=1    
    x = ["Adam","Not Adam"]
    y = [myCount, otherCount]
    ax1.clear()
    ax1.bar(x,y)
ani = animation.FuncAnimation(fig, animate, interval=1000)            
plt.show()

现在,它向我显示了图形的轮廓,但未显示任何内容。 另外,我从另一个来源获得了动画功能。有更有效的方法吗?

好,所以我更新了代码:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
import csv
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

def animate(i):
    myCount = 0
    otherCount = 0
    with open('testcsv.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            if row['fName'] == 'Adam':
                myCount +=1
            else:
                otherCount +=1    
    x = ["Adam","Not Adam"]
    y = [myCount, otherCount]
    ax1.clear()
    ax1.bar(x,y)
ani = animation.FuncAnimation(fig, animate, interval=1000)            
plt.show()

通过测试,我知道它正确地捕获了CSV并读取了数据,但仍未绘制它。数据如下:

fname,lname
Adam,Smith
Adam,Sandler
Adam,Smith
Adam,Sandler
Bruce,Willis
Adam,Smith
James,Harden
Bruce,Wayne

1 个答案:

答案 0 :(得分:0)

该代码似乎存在三个主要问题。前两个与使用中的计数器有关。最后是数据的命名。

  1. otherCount = +=1是无效的python。
  2. 在本地增加变量,不会全局更改。因此,如果您不想显示累积计数,则可以在动画功能中定义myCount = 0; otherCount = 0
  3. 数据列似乎命名为fname,但索引使用row['fName']